我在开发过程中遇到了一个奇怪的运行时问题。我在这里简化了问题。
public class Test {
public static void main(String[] args) {
List<String> listOfString = ImmutableList.of("a", "s");
List<Object> listOfObject = ImmutableList.of("a", "s");
System.out.println("listOfObject = " + test(listOfObject));
System.out.println("listOfString = " + test(listOfString));
}
public static String test(List<Object> a){
return "List"+ a;
}
public static String test(Object a){
return "Object"+ a;
}
}
我希望这两个方法调用都会调用 test(List
这里有一点棘手。
如果您有
List<String> myList
,它与方法 List<Object>
不匹配,但它确实与仅包含 Object
的方法匹配。这就是为什么你会得到你正在经历的结果。
如果你想将方法与列表匹配,可以使用通配符,例如:
public static String test(List<?> a){
return "List"+ a;
}
然后如果你运行你的代码:
import java.util.List;
public class Test {
public static void main(String[] args) {
List<Object> listOfObject = List.of("a", "s");
System.out.println("listOfObject = " + test(listOfObject));
List<String> listOfString = List.of("a", "s");
System.out.println("listOfString = " + test(listOfString));
}
public static String test(List<?> a){
return "List"+ a;
}
public static String test(Object a){
return "Object"+ a;
}
}
它将打印
List
。
此外,我从番石榴中删除了
LmmutableList
,因为 Java 本身有一个本地替代方案 List.of("x", "y")
,但这与答案无关。
您可以阅读更多内容: