有很多类似错误的问题,但似乎没有一个问题能解决我的问题。
我只是希望能够使用各种foo
方法重用相同的bar
泛型。这样做的正确方法是什么?
public class Test {
static public <T> String foo(T object) {
return bar(object);
}
static public String bar(String object){
return "string:" + object;
}
static public String bar(Integer object){
return "integer:" + object;
}
public static void main(String[] args) throws Exception {
System.out.println(foo("blabla"));
}
}
我收到The method bar(String) in the type Test is not applicable for the arguments (T)
编译错误。
答案 0 :(得分:1)
您应该更新如下。由于函数无法知道它触发错误的类型
public class Test {
static public <T> String foo(T object) {
if(object instanceof String){
return bar((String)object);
}else if(object instanceof Integer){
return bar((Integer)object);
}
return null;
}
static public String bar(String object){
return "string:" + object;
}
static public String bar(Integer object){
return "integer:" + object;
}
public static void main(String[] args) throws Exception {
System.out.println(foo("blabla"));
}
}
答案 1 :(得分:1)
问题是T
的类型为Object
,因此您可以将每个Java对象传递给foo
。另一方面,bar
方法的参数具有特定类型,在本例中为String
和Integer
。您要做的是将Object
传递给期望String
的方法。由于Java无法自动转发类,因此会出现此错误。
您必须将T
转换为正确的类型
public String foo(Object object) {
if(object instanceof String)
return bar((String)object);
if(object instanceof Integer)
return bar((Integer)object);
return null;
}