一尘不染

泛型构造函数在Java中有什么作用?

java

众所周知,您可以使用类型参数在Java中创建一个通用类:

class Foo<T> {
    T tee;
    Foo(T tee) {
        this.tee = tee;
    }
}

但是,您也可以使用泛型 构造函数 ,这意味着显式接收其自己的泛型类型参数的构造函数,例如:

class Bar {
    <U> Bar(U you) {
        // Why!?
    }
}

我正在努力了解用例。这个功能让我做什么?


阅读 192

收藏
2020-12-03

共1个答案

一尘不染

这个功能让我做什么?

它至少可以让您完成 件事,而这 件事是您无法做到的:

  1. 表达参数类型之间的关系,例如:

    class Bar {
    <T> Bar(T object, Class<T> type) {
        // 'type' must represent a class to which 'object' is assignable,
        // albeit not necessarily 'object''s exact class.
        // ...
    }
    

    }

  2. <撤回>

  3. 正如@Lino首先观察到的那样,它使您可以表达参数必须与两个或多个不相关类型的组合兼容(当最多一个是接口类型时,这才有意义)。有关示例,请参见Lino的答案。

2020-12-03