当前位置: 首页 > 面试题库 >

为什么Java泛型不支持基本类型?

段干茂实
2023-03-14
问题内容

为什么Java中的泛型只能用于类,而不能用于原始类型?

例如,这可以正常工作:

List<Integer> foo = new ArrayList<Integer>();

但这是不允许的:

List<int> bar = new ArrayList<int>();

问题答案:

ava中的泛型是一个完全编译时的结构-编译器将所有泛型使用转换为正确的类型。这是为了保持与以前的JVM运行时的向后兼容性。

这个:

List<ClassA> list = new ArrayList<ClassA>();
list.add(new ClassA());
ClassA a = list.get(0);

变成(大致):

List list = new ArrayList();
list.add(new ClassA());
ClassA a = (ClassA)list.get(0);

因此,任何用作泛型的东西都必须可转换为Object(在此示例中get(0)返回Object),而原始类型则不是。因此它们不能用于泛型。



 类似资料:
  • 下面是错误指定的错误示例。我应该如何修复它,为什么我得到一个错误?

  • 为什么Java中的泛型可以处理类而不能处理基元类型? 例如,这个操作很好: 但这是不允许的:

  • 问题内容: 我正在使用泛型编写某些东西,令我惊讶的是,我发现这行不通: 那我不能实例化泛型吗?没有任何方法可以做到这一点吗? 问题答案: 是的,这真是令人讨厌。 我使用的解决方法是强制客户端在构造新类时传递类-即 然后您可以使用。

  • 本文向大家介绍为什么Java不支持<<相关面试题,主要包含被问及为什么Java不支持<<时的应答技巧和注意事项,需要的朋友参考一下 Java添加了运算符“ >>>”来执行逻辑右移,但是由于 逻辑和算术左移运算是相同的 ,因此Java中没有“ <<<”运算符。 来自Java的Shifts …

  • 问题内容: 在Java中,Map接口定义为 为什么不? 我刚遇到一个讨厌的错误,因为使用了错误的类型密钥。我认为泛型的目的是在编译期间及早捕获类型错误。这会达到目的吗? 问题答案: 凯文·布罗里恩(Kevin Bourrillion)不久前就在博客上发表了文章。摘要: 一致地,除非有必要防止集合损坏,否则Java Collections Framework(以及Google Collections

  • 我正在尝试我的第一个Quarkus应用程序,并且正在从Spring转移到Quarkus。 在Spring中,我创建了一个helper库,其中定义了一个通用的StandardService。 服务类如下所示: model类如下所示: 是我的代码中遗漏了什么,还是Quarkus的限制?在Spring中,我可以在服务内部编译和使用它。