有多个参数时获取.class

时间:2015-11-05 19:40:01

标签: java generics

    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只采用一个参数,因此它的表面不平衡。

1 个答案:

答案 0 :(得分:1)

在设计采用类定义的API时,通常有两种选择:

  1. 接受裸课并且根本不支持参数化类型。此类库的用户将无法从完整的Java类型系统中受益,并且客户端代码将具有未经检查的警告并使用原始类型

  2. 声明Type个参数并动态读取类型参数。这类库的用户将使用称为type token的惯用法将Type参数传递给库。演示代码

  3.  RuntimeSchema.getSchema(new MyTypeToken<Message<String, Integer>>(){{}});
    

    请注意,new MyTypeToken<Message<String,Integer>>(){{}}是一种匿名类型,用于保存有关类型参数的信息,否则这些信息将被编译器删除,并且在运行时不可用。