方法重载java - 使用列表类型

时间:2016-05-04 07:48:51

标签: java overloading

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

我可以通过其他方式在这里使用重载吗?

3 个答案:

答案 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

WORKING IDEONE DEMO