У меня есть абстрактный класс, в котором создается сообщение Google Protocol Buffers с использованием абстрактных методов, как в следующем примере кода:
public abstract class AbstractMessageCreator {
private long queryId;
protected AbstractMessageCreator(long queryId) {
this.queryId = queryId;
}
protected void createMessage() {
SomeMessage.Builder messageBuilder = SomeMessage.newBuilder();
messageBuilder.setId(queryId);
messageBuilder.setSource(getSource());
messageBuilder.setDestination(getDestination());
System.out.println(messageBuilder);
System.out.println("Details:");
System.out.println(queryId);
System.out.println(getSource());
System.out.println(getDestination());
// the above lines are written to the console, the following one just prints null
System.out.println(messageBuilder.build().getSource().getSomeProperty());
// doing something with the created message
}
protected abstract SomeSource getSource();
protected abstract SomeDestination getDestination();
}
Когда я создаю конкретный класс, используя его в качестве своегосуперкласс и попытаться создать мое сообщение, его значения не инициализируются, хотя все возвращаемые значения записываются в консоль, что означает, что методы предоставляют некоторые значения, которые нельзя установить в компоновщике.
У вас есть идеи, что это вызывает?Я использую протокольные буферы 3.5.1.
Заранее спасибо.