首页 > 解决方案 > 返回类型Class<>之前的Generic <>是什么意思

问题描述

我见过像下面这样的几个例子,其中返回类型包含两次泛型,

first set 是什么意思,我理解该方法应该返回一个包含 C 类型元素的数组类,但是什么是 first C

     public static <C> Class<C[]> arrayClass(Class<C> klass) {
        return (Class<C[]>) Array.newInstance(klass, 0).getClass();
    }

标签: javagenerics

解决方案


那是泛型参数的声明,在您的情况下,它被命名C但它几乎可以是任何东西。(有一些限制,例如保留关键字和一般 java 命名限制)。

它用于告诉 java 在您的方法的上下文中,C它是一个泛型类型。

没有它,java 将尝试解析C并检查 aclassinterface是否存在。

看这个例子:

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); 

推荐阅读