注意:纯粹出于好奇而不是用于任何实际用例。
我想知道是否有一种方法可以Class
Class
使用有效的类型参数声明对象:
Class cc1 = Class.class; //raw type
Class<Class> cc2 = Class.class; //now parameter is raw type
Class<Class<?>> cc3 = Class.class; //compile error: inconvertible types
如果Class
和Class<?>
是可以互换的,为什么Class<Class>
和Class<Class<?>>
不呢?
编辑: 问题可以推广到嵌套原始类型参数的问题。例如:
ArrayList<ArrayList<?>> lst = new ArrayList<ArrayList>(); //same compile error
编辑2: 我应该稍微改一下这个问题:我知道
Class<?> c = Class.class;
是有效的,但我想知道为什么Class<Class>
与Class<Class<?>>
泛型有一些相当严重的局限性。在这种情况下,您不能将类型分配给内部类型,Class<Class>
因为您实际上是在引用原始类型,而不是原始类型的实现。它会给您一个警告,但您无法解决该警告。
Class<Class<?>>
本身不是不可转换的类型,您不能直接给它分配一个类,因为它没有类型Class<Class<T>>
,而是有类型Class<T>
。
用另一种方式思考;尝试一下List<List<String>>
。要创建该列表,您需要创建一个包含字符串列表的列表。这是可行的,因为列表可以包含列表。
与数据对象相比,类更像原始html" target="_blank">对象,因此我认为不可能创建其他类型的类。
编辑
:关于您的额外问题ArrayList<ArrayList<?>>
是您遇到的不可转换类型问题的一个更明显的示例Class<Class<?>>
。
问题内容: 我有一个其键为通用类型,而值为类型。如果键是的实例,则值必须是,并且相同的规则适用于任何其他键值对。我尝试了以下方法,但无法编译: 目前,我必须使用“部分”泛型进行声明: 我知道这很糟糕,但是我目前没有更好的选择。在这种情况下可以使用泛型吗? 更新 也许我没有明确表达我的问题。我想要一张能够: 并且以下代码不应编译: 键和值应始终具有相同的泛型类型,而泛型类型可以是任意泛型,并且显然扩
问题内容: 有人可以解释一下这是什么意思吗? 这似乎是一个循环定义,至少可以说让我感到困惑。 问题答案: Java Generics FAQ中 有很好的解释。 从末尾开始: 概括起来,声明可以解密为:是仅可为其子类型实例化的泛型类型,并且这些子类型将继承一些有用的方法,其中一些方法具有子类型特定的参数(否则取决于子类型)。 (尽管我确实很同情-递归的泛型声明很痛苦。但是,我的协议缓冲端口到C#的情
“绑定不匹配:Team类型不是league类型 的有界参数 >的有效替代品。”
问题内容: 给定一些类,这两个方法声明是否等效? 和 问题答案: 对于呼叫者:是的,它们是等效的。 对于方法中的代码:否。 不同之处在于,在第一个示例的代码中,您可以使用类型T(例如,保存由创建的对象),而在第二个示例中,您不能使用类型T。
本文向大家介绍如何使用JSP声明来声明类的对象?,包括了如何使用JSP声明来声明类的对象?的使用技巧和注意事项,需要的朋友参考一下 声明声明了一个或多个变量或方法,您可以稍后在JSP文件中的Java代码中使用它们。在JSP文件中使用变量或方法之前,必须先声明该变量或方法。 以下是JSP声明的语法- 您可以编写与上述语法等效的XML,如下所示- 以下是JSP声明中对象声明的示例-
我创建了一个配置对象检查器函数,它基本上检查对象是否与蓝图匹配。与React道具类型的工作原理非常相似。我将使用它在不同的网站上使用不同的配置文件自动部署应用程序,以确保在尝试部署之前正确定义配置文件。 我有一个函数,它接受一个对象并返回一个函数。 获取一个蓝图,说明我们期望对象中的键是什么,指定键的值类型是什么,以及它们是可选的还是必需的。返回一个函数,该函数以两个对象为参数。 参数是我们计划用