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

“ E”,“ T”和“ E”有什么区别?Java泛型?

钱弘壮
2023-03-14
问题内容

我遇到了像这样的Java代码:

public interface Foo<E> {}

public interface Bar<T> {}

public interface Zar<?> {}

以上三种之间的区别是什么?它们在Java中如何称呼这种类型的类或接口声明?


问题答案:

好吧,前两个没有什么区别-它们只是为 type参数ET)使用了不同的名称。

第三个不是有效的声明- ?用作提供类型实 时使用的 通配符 ,例如,意味着引用某种类型的列表,但我们不知道是什么。 __List<?> foo = ...``foo

所有这些都是 泛型 ,这是一个很大的话题。您可能希望通过以下资源了解它,尽管当然还有更多可用的方法:

  • Java泛型教程
  • 泛型语言指南
  • Java编程语言中的泛型
  • Angelika Langer的Java泛型常见问题解答(详细而全面;不过更多参考)


 类似资料:
  • 问题内容: 我正在处理一些旧代码,发现曾经使用过 但是我现在尝试 似乎在做同样的事情,还是这样做?我有点记得我这样做是有原因的,但是我不记得了,做“ man sed”并没有帮助,因为他们对-E仅一无所知- e对以太并没有多大意义。 我以为-e表示它将与正则表达式匹配… 问题答案: 从源代码开始,是与BSD sed兼容的未记录的选项。 从手册开始,在BSD中sed用于支持扩展的正则表达式。

  • 请问这2种写法有什么区别?我VSCode运行都是可以运行的。

  • 问题内容: 可能有人解释一下这两个符号之间的细微差别:和。 看起来这两者之间的唯一区别是它返回nil指针或不返回任何指针,但仍为Struct的所有字段分配内存。 问题答案: 这两种形式的和是完全等效的:两个分配零T和一个指针返回到该分配的内存。唯一的区别是,对于像; 这样的内置类型不起作用。你只能做。 该表格并 没有 分配它只是返回一个零指针T.你仅仅是一个混淆的惯用的变种。

  • 问题内容: 可能是一个新手问题,但每个人似乎都在使用,但在处理异常时我一直都在使用。有什么区别,为什么更可取? 问题答案: 所使用的输出流与@Brian指出的输出流不同,但是详细程度也不相同-您可以尝试以下简单测试。输出: With :您只知道抛出了什么异常 java.lang.UnsupportedOperationException:尚未实现 使用:您还知道是什么原因造成的 (行号+调用堆栈)

  • 问题内容: 该方法(可以接在执行)如下: 我想知道在这种情况下我们可以代替使用吗?喜欢 既然ArrayList类iteself已经是通用的,那么我们可以使用它代替新的通用类型吗? 问题答案: 的要点是,如果所需的数组是的基类。例如,如果为,但所需的数组为。如果被锁定到这是不可能的。 由于类型擦除,在通用集合/类型中不需要这种类型的东西。但是数组没有类型擦除,因此数组的类型非常重要。

  • 问题内容: 我已经看过以前用来表示任何对象的通配符-但最近看到了以下用法: 由于所有对象都扩展了对象,所以这两种用法是同义词吗? 问题答案: 并且是同义的,正如你所期望的。 在某些情况下,泛型实际上并不是多余的。例如,将导致成为下删除,而与它会成为下删除。(如果你要保留与使用的前泛型API的兼容性,这可能很重要。) 来源:http : //download.oracle.com/javase/tu