通用构造函数的好处

not*_*oop 9 java generics polymorphism

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

class NonGeneric {
  <T> NonGeneric() { }
  ...
  NonGeneric ref = new <String> NonGeneric();
}
Run Code Online (Sandbox Code Playgroud)

可以提出一个现实的例子来说明它何时提升了班级的类型安全性?首先如何比使用Generic更好.

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

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

Jon*_*han 5

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

例如:

<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());
    }
}
Run Code Online (Sandbox Code Playgroud)

语言设计人员很可能只是出于某些人的意愿而决定这样做,因为没有理由阻止人们这样做。