如何从通用方法调用非通用方法

Var*_*yan 4 java generics

如何从通用方法调用非通用方法:

    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)

也可以在编译时而不是在运行时执行此操作吗?

rap*_*aëλ 5

编译器无法确定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)