我开始学习Generics
for Java
我读了几个教程,但我有点困惑,不确定如何声明泛型方法。
当我使用泛型类型时,定义方法的正确顺序是什么?我找到了这个示例,什么时候需要使用尖括号,什么时候不需要?
public class Box<A> {
private A a;
...
public void setA(A a) {
this.a = a;
}
public <A> List<A> transform(List<A> in) {
return null;
}
public static <A> A getFirstElement(List<A> list) {
return null;
}
public A getA() {
return a;
}
问题是您的代码使用相同的字符 A,但它有several不同地方有不同的“含义”:
public class Box<T> {
需要大括号,因为您在这里说:Box 使用通用类型,称为 T。
UsagesT 不带大括号:
private T a;
public void setA(T a) {
But then
public <T2> List<T2> transform(List<T2> in) {
正在介绍another类型参数。我将其命名为 T2 是为了明确它是not与 T 相同。这个想法是scopeT2 的值为only那一种方法transform
。其他方法不知道T2怎么样!
public static <A> A getFirstElement(List<A> list) {
与上面相同 - 这里是“T3”;-)
编辑你的评论:你不能有static方法使用类范围类型 T。这根本不可能!看here为什么会这样!
编辑2:泛型允许你编写这样的代码generic(因为它可以处理不同的类);但还是给了你编译时安全。例子:
Box<String> stringBox = new Box<>();
Box<Integer> integerBox = new Box<>();
integerBox.add("string"); // gives a COMPILER error!
在人们拥有泛型之前,他们只能处理Object到处都是;和手工铸造。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)