我有一个方法,像这样,
public <T> T doSomething(Class<T> T) {
return T.newInstance();
}
Run Code Online (Sandbox Code Playgroud)
我也可以像这样做,
public T doSomething(Class<T> T) {
return T.newInstance();
}
Run Code Online (Sandbox Code Playgroud)
这两者有什么区别吗?请忽略T.newInstance(),我基本上要以某种方式创建T的新实例并返回它.
谢谢,山姆
在方法的返回类型中
<T> Tvs 之间有什么区别T?
没有<T> T.这<T>不是返回类型的一部分; 它是一个单独的东西,表示类型参数.(你也可以public <T> void ....)
在带有的版本中<T>,您将声明T为方法的类型参数,而T参数和返回类型中引用的是该类型参数.
在没有的版本中<T>,您不会声明T为方法的类型参数,因此它很可能是包含类的类型参数或包含范围的另一个类型参数.(或者,有人可能已经命名了一个实际的类或接口T,在这种情况下,你应该给那个人说话.)
如果两个版本都编译,那么第二个版本可能是您想要的版本:您可能希望使用类的类型参数T,而不是添加一个隐藏它的新版本.(如果你真的想要一个与你的类的类型参数无关的新类型参数,那么你应该使用一个新名称来避免混淆.)
在第一个示例中,您声明了一个doSomething具有自己的类型参数的泛型方法<T>。如果它位于泛型类中,那么它<T>与该类可能具有的任何类型参数(甚至是另一个<T>!)是分开的。
在第二个示例中,您没有在 上声明泛型类型参数doSomething。如果该类定义了<T>,则此方法只需使用它。如果不存在,则T无法识别并导致编译器错误。
| 归档时间: |
|
| 查看次数: |
456 次 |
| 最近记录: |