java - 返回类型 Class<> 之前的 Generic <> 是什么意思

标签 java generics

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

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/

相关文章:

Java泛型列表中,如何处理List<MyClass<?>>

java - Guice/Eclipse TypeLiteral 问题

generics - 使用 mem::size_of::<T> 作为数组长度时,编译时无法知道类型 `T` 的值的大小

Objective-C - 返回给定类类型的工厂?

java - 如何在注册过程中验证电子邮件?

java - 包装的 ByteBuffers 应该返回什么状态?

java - 如果我的 map 需要小而不是快,我应该使用 Map<K,V> 的哪个实现?

swift - 为什么泛型类型不通过调用链下游的约束参与方法重载?

java - 来自 .NET Webservice 的压缩数组字节 Java

java - 为 DB2 转义 dbunit 中的保留关键字