我试图了解泛型是如何工作的,并编写了一个方法来测试它。
我创建了对象 - Drink 及其子对象 Coffee...并定义了一个通用方法 go1() 来调用这两个对象的 sip() 方法...
我在 Eclipse 中运行并收到错误 - 指出方法 sip() 对于类型 V 未定义。
有人可以解释一下这是如何处理的吗?
class Drink{
public void sip(){
System.out.println("Im Drink method");
}
}
class Coffee extends Drink{
public void sip(){
System.out.println("Im Coffee method");
}
}
public class test{
public static <V> V go1(V o){
o.sip();
}
public static <V> void go(V v){
System.out.println(v.hashCode());
}
public static void main(String[] args) {
Drink s1 = new Drink();
go1(s1);
int i = 10;
String j ="test";
go(i);
go(j);
}
}
最佳答案
只需为类型参数添加界限:
public static <V extends Drink> void go1(V o){
o.sip();
}
通过类型参数绑定(bind),您可以访问绑定(bind)的非静态方法 - Drink
在本例中,使用该类型参数的引用。
编辑后:
通过String
和Integer
根据您的方法,您可以想到哪个共同上限适合两者。 String
的公共(public)父类(super class)型和Integer
是:
因此,您可以拥有三种边界:
-
<V extends Object>
-
<V extends Serializable>
-
<V extends Comparable<V>>
所以你只需修改你的 go()
方法如下:
public static <V extends Object> void go(V v){
System.out.println(v.hashCode());
}
引用文献:
关于java - 泛型方法 - 传递对象并调用其方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19139660/