java - 为什么在泛型类(Java)的构造函数中提供类型参数是错误的?

标签 java oop generics syntax constructor

我只是从一本教科书中学习 Java 中的泛型,它谈到了一个类 GenericStack<E>ArrayList<E> 实现.

因为为了创建一堆字符串,您使用

GenericStack<String> = new GenericStack<String>()

GenericStack<String> new GenericStack<>()

因此不应该的构造函数 GenericStack定义为 public GenericStack<E>() , 或 public GenericStack<>() ?答案是不。应定义为 public GenericStack() .

这是为什么?显然构造函数可以很容易地从类声明中推断出类型,但是考虑到 Java 的冗长,我有点困惑为什么 <E>或者只是 <>在这里完全摆脱了形式主义。

最佳答案

这有两个部分:

  1. 为类定义指定的泛型类型参数在类本身内可用。

  2. 您可以拥有特定于各个方法(包括构造函数)的泛型类型。

看下面的例子:

package snippet;

import java.util.ArrayList;

public class Y<E> extends ArrayList<E> {

    public <T> Y(T t) {
    }
}

E 类型可用于整个类,T 类型仅在构造函数中有效。

关于java - 为什么在泛型类(Java)的构造函数中提供类型参数是错误的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32304427/

相关文章:

java - 共享首选项类

Java - JUnit Mockito 方法方法

oop - 在一个好的 OOP 设计中,我们应该使用什么来代替 "manager"类?

oop - 这个反模式的名字是什么?方法签名是个骗子

c++ - 简单抽象数据类型链表

java - 如何用数组的数组解析json数组

java - Android SDK - Eclipse - 如何在多个类中使用一段代码

javascript - this._get 不是一个函数 - javascript oop 和原型(prototype)

generics - 注入(inject)由抽象类型参数化的类型化类

java - 使用绑定(bind)参数的 Java 泛型可以用其上界实例化吗?