我有一个抽象类,其中使用抽象方法创建Google协议缓冲区消息,就像下面的代码示例一样:
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。
谢谢。