java - 通用构造函数的好处

标签 java generics polymorphism

为非泛型类使用泛型构造函数有什么好处? Java 规范允许以下内容:

class NonGeneric {
  <T> NonGeneric() { }
  ...
  NonGeneric ref = new <String> NonGeneric();
}

有人能想出一个现实的例子来说明它何时增强了类的类型安全性吗?它比一开始就使用 Generic 更好。

我知道 Java 设计者希望构造函数与方法更加一致。 考虑到构造函数可能有副作用,泛型构造函数可以使用泛型来改变一些不保留引用的参数,如

<T> NonGeneric(T obj, List<T> list) {
  list.add(obj);
  // Don't hold a reference to list
}

最佳答案

我能想到的唯一用途是构造函数在运行时需要使用通用对象,但在完成后没有存储该对象。

例如:

<T> NonGeneric(T[] blank, List<T> list) {
    // Sort that list
    T[] array = list.toArray(blank);
    Arrays.sort(array);

    // Pull out the values as strings
    this.list = new ArrayList<String>(array.length);
    for (T value : array) {
        this.list.add(value.toString());
    }
}

这很可能只是语言设计者决定做的事情,以防万一有人想要它,因为没有理由阻止人们这样做。

关于java - 通用构造函数的好处,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1300037/

相关文章:

java - 使用 Java 查找文件中的最大和最小数字

java - 如何使用 JAVACV 创建访问网络摄像头的 Java Applet

java - 接口(interface) I 不能用不同的参数多次实现 : I<String> and I<String>

java - 为什么重写的函数首先被调用?

c++ - 为什么 "virtuality"方法在 C++ 中隐式传播?

Java Web 服务和多态性

Java抽象类TransformerFactory可以实例化吗?

java - 使用 Java 泛型和 Java 8 lambda 传递带有 Callable 的 void 方法

c# - 具有继承和通用约束的两步方法解析

java - LWJGL 3 图像加载?