你能用泛型进行方法重载,只改变方法签名的泛型类型吗?

Bre*_*nes 9 java oop generics overloading

如果你不使用Java Generics,我相信在同一个类中只有两个方法不同,它们的返回类型不同.

换句话说,这将是非法的:

public HappyEmotion foo(T emotion) {
    // do something
}   

public SadEmotion foo(T emotion) {
    // do something else
}   
Run Code Online (Sandbox Code Playgroud)

在重载返回可能实现不同接口的泛型类型的方法时也是如此,例如,如果在同一个类定义中存在以下两个方法:

public <T extends Happy> T foo(T emotion) {
    // do something
}   

public <T extends Sad> T foo(T emotion) {
    // do something else
}   
Run Code Online (Sandbox Code Playgroud)

这是非法的吗?

Pra*_*ena 6

这是合法的,因为输入参数根据类型而有所不同.

因此,以下是合法的,

public <T extends Happy> T foo(T emotion) {
    // do something
}   

public <T extends Sad> T foo(T emotion) {
    // do something else
}
Run Code Online (Sandbox Code Playgroud)

但是以下不是,

public <T extends Happy> String foo(T emotion) {
    // do something
}   

public <T extends Happy> T foo(T emotion) {
    // do something else
} 
Run Code Online (Sandbox Code Playgroud)

谢谢...