class Value {
public void method1(List<Integer> intList) {
}
public void method1(List<Double> doubleList) {
}
}
在上述两种方法中无法使用功能重载。
这看起来两种方法都将List
作为参数。
有没有办法区分列表数据类型的参数?
这是错误信息:
Erasure of method method1(List<Integer>) is the same as another method in type Value
我可以通过其他方式在这里使用重载吗?
答案 0 :(得分:0)
您可以method1(List<Object> List)
并使用instanceof
答案 1 :(得分:0)
您不能声明多个具有相同名称和相同数量和类型的参数的方法,因为编译器无法区分它们。请参阅oracle docs。
答案 2 :(得分:0)
您可以使用泛型:
public void method1(List<?> list) {
}
以这种方式声明方法,您可以检查列表的内容并完成您需要的工作:
public static void check(List<?> list) {
// check null
if (Objects.equals(null, list))
System.out.println("null");
// check empty
else if (list.isEmpty())
System.out.println("empty");
// if the list is ok, let's see what it has inside
else if (list.get(0) instanceof Integer)
System.out.println("int");
else if (list.get(0) instanceof Double)
System.out.println("double");
}
简单执行主要:
public static void main(String[] args) {
List<Integer> ints = new ArrayList<Integer>();
List<Double> doubles = new ArrayList<Double>();
check(null);
check(ints);
ints.add(1);
check(ints);
doubles.add(1D);
check(doubles);
}
<强>输出:强>
null
empty
int
double