【问题标题】:What is the meaning of Generic <> before the return type Class<> [duplicate]返回类型Class<>之前的Generic <>是什么意思[重复]
【发布时间】:2020-02-14 11:22:04
【问题描述】:

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

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

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

【问题讨论】:

标签: java generics


【解决方案1】:

这是一个泛型参数的声明,在你的例子中它被命名为C,但它几乎字面上可以是任何东西。 (有一些限制,例如保留关键字和一般 java 命名限制)。

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

没有它,java 会尝试解析 C 并检查是否存在 classinterface 等。

看这个例子:

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

但是当我从方法中删除 &lt;String&gt; 时,它将失败,因为 java 现在假定您的意思是 java.lang.String

// compile error: 
//    Required type Class<String> 
//    provided      Class<Integer>
Class<Integer[]> klass = arrayClass(Integer.class); 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-03
    • 1970-01-01
    • 2014-10-03
    • 2014-08-27
    • 2020-09-16
    • 2017-12-03
    • 1970-01-01
    • 2012-04-19
    相关资源
    最近更新 更多