private Schema<Message<K, V>> messageSchema = RuntimeSchema.getSchema(Message.class);
如您所见,我使用的函数需要我的Message类的类。但是,我不能这样做,因为它需要多个参数。
以前,我尝试使用:
private final Class<K, V> type;
public MessageClass(Class<K, V> type) {
this.type = type;
}
public Class<K, V> getMyType() {
return this.type;
}
然而,由于Class只采用一个参数,因此它的表面不平衡。
答案 0 :(得分:1)
在设计采用类定义的API时,通常有两种选择:
接受裸课并且根本不支持参数化类型。此类库的用户将无法从完整的Java类型系统中受益,并且客户端代码将具有未经检查的警告并使用原始类型
声明Type
个参数并动态读取类型参数。这类库的用户将使用称为type token的惯用法将Type
参数传递给库。演示代码
RuntimeSchema.getSchema(new MyTypeToken<Message<String, Integer>>(){{}});
请注意,new MyTypeToken<Message<String,Integer>>(){{}}
是一种匿名类型,用于保存有关类型参数的信息,否则这些信息将被编译器删除,并且在运行时不可用。