我见过一些像下面这样的例子,其中返回类型包含泛型两次,
first set 的含义是什么,我理解该方法应该返回一个包含 C 类型元素的数组类,但是 first C 是什么
public static <C> Class<C[]> arrayClass(Class<C> klass) {
return (Class<C[]>) Array.newInstance(klass, 0).getClass();
}
最佳答案
这是一个通用参数的声明,在你的例子中它被命名为 C
但它几乎可以是任何东西。 (存在一些限制,例如保留关键字和一般 java 命名限制)。
它用于告诉java,在你的方法的上下文中,C
是一个泛型类型。
没有它java会尝试解析C
并检查是否有class
, interface
等等都会存在。
请参阅此示例:
public static <String> Class<String[]> arrayClass(Class<String> klass) {
return (Class<String[]>) Array.newInstance(klass, 0).getClass();
}
您看到我已将通用参数名称声明为 String
,但我的意思不是 java.lang.String
这只是我定义的占位符名称。所以当我这样做时效果很好:
Class<Integer[]> klass = arrayClass(Integer.class);
但是当我删除 <String>
时从该方法,那么它将失败,因为 java 现在假设您的意思是 java.lang.String
:
// compile error:
// Required type Class<String>
// provided Class<Integer>
Class<Integer[]> klass = arrayClass(Integer.class);
关于java - 返回类型 Class<> 之前的 Generic <> 是什么意思,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60225336/