GeneratedMessage.Builder是GeneratedMessage中的静态嵌套类(它们都是抽象类)。在GeneratedMessage.Builder类型的对象上调用方法build()
时,它返回一个GeneratedMessage类型的对象。是否有一些方法可以在以下示例中声明我的原始类型T
和B
,这将使convert()
的return语句中的类型转换变得不必要。
public class JsonStringToMessageConverter<T extends GeneratedMessage, B extends GeneratedMessage.Builder<B>>
implements IConverter<String, T> {
private final IPbBuilderProvider<B> m_builderProvider;
@Inject
public JsonStringToMessageConverter(IPbBuilderProvider<B> builderProvider) {
m_builderProvider = builderProvider;
}
@Override
public final T convert(String value) {
B builder = m_builderProvider.getPbBuilder();
try {
JsonFormat.merge(value, builder);
} catch (ParseException e) {
throw new LoggedRuntimeException(ErrorType.PARSE_FAILED, e);
}
return (T) builder.build();
}
}
课程GeneratedMessage
在Google的Protobuf库中定义。
答案 0 :(得分:0)
您应该使用Builder
中的type参数作为build()
方法返回类型,并将其声明为extends GeneratedMessage
。
我看到build method不是通用的,所以你不能这样做,我很害怕。
答案 1 :(得分:0)
没有,因为在build
类中定义了Message.Builder
方法,并且该类不是通用的。 build
方法返回Message
对象,而不是Message
类的某些通用扩展。因此,GeneratedMessage.Builder
没有通用操作会导致build
的方法签名返回Message
以外的任何内容。