如何从通用方法调用非通用方法:
class Test {
...
public <T> int someFunction1(T someParam) {
return someFunction2(someParam);
}
public int someFunction2(String someParam) {
return 1;
}
public int someFunction2(Integer someParam) {
return 1;
}
}
Test t = new Test;
t.someFunction1(new String("1"));
t.someFunction1(new Integer(5));
Run Code Online (Sandbox Code Playgroud)
也可以在编译时而不是在运行时执行此操作吗?
编译器无法确定someParaminsomeFunction1是 aString还是 an Integer。像这样的事情会起作用:
public <T extends String> int someFunction1(T someParam) {
return someFunction2(someParam);
}
public int someFunction2(String someParam) {
return 1;
}
Run Code Online (Sandbox Code Playgroud)
如果你希望它是String/Integer你需要创建一些数据类型或创建的重载定义someFunction1,其中T必然Integer
或者只是一些“丑陋”的演员阵容:
public <T> int someFunction1(T someParam) {
if (someParam instanceof Integer)
return someFunction2((Integer) someParam);
else if (someParam instanceof String)
return someFunction2((String) someParam);
else throw new IllegalArgumentException("Expected String or Integer")
}
Run Code Online (Sandbox Code Playgroud)