java - 返回类型Class<>之前的Generic <>是什么意思
问题描述
我见过像下面这样的几个例子,其中返回类型包含两次泛型,
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
并检查 aclass
等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);
推荐阅读
- routes - 在 Magento 2 中显示来自父产品的自定义选项
- javascript - Select2 - 将属性添加到选项
- c - 如何在 dup2 中使用 FIFO?
- html - 在固定导航栏上使用具有相对位置属性的包装器有什么意义?
- ios - 如何重新排序 collectionView 单元格,例如在主屏幕中重新排序应用程序(对于 iPhone)?
- python - 如何在python中为GET请求添加轮询间隔
- python - Python - 从派生类实例化的对象的序列号
- assembly - 6502汇编:16位减法进位结果
- delphi - 如何从 Java 按钮中隐藏手形光标?
- android - 颤振的条形码扫描仪结果