方法重载和泛型

dur*_*597 9 java generics overloading

在选择哪个重载方法正确时,Java通常更喜欢普通方法,这可能会生成以下sscce:

public class GenericsTest {
    public static void main(String[] args) {
        myMethod(Integer.class, 10);
        myMethod(String.class, "overloaded method");
    }

    public static <T> void myMethod(Class<T> klass, T foo) {
        System.out.println("hello world");
    }

    public static <T> void myMethod(Class<T> klass, String bar) {
        System.out.println(bar);
    }
}
Run Code Online (Sandbox Code Playgroud)

输出:

hello world
overloaded method
Run Code Online (Sandbox Code Playgroud)

有没有办法强制Java使用通用版本?

Ben*_*ulz 3

不,至少要删除或隐藏更具体的重载。然而,如果他们的行为不同,他们应该有不同的名字。如果他们的行为相同,那么无论如何都没有关系。