我在强制执行 (Enum) 接口实现作为 Java 中的重写方法参数时遇到问题。显示我正在尝试执行的操作的相关(简化)代码:
public interface AnimalSound {}
Run Code Online (Sandbox Code Playgroud)
public enum CowSound implements AnimalSound {
MOO, BOO
}
Run Code Online (Sandbox Code Playgroud)
public interface Animal {
<T extends AnimalSound> T getSound();
<T extends AnimalSound> void setSound(T sound);
}
Run Code Online (Sandbox Code Playgroud)
public class Cow implements Animal {
@Override
public CowSound getSound() {
return CowSound.BOO;
}
@Override
public <T extends AnimalSound> void setSound(T sound) {
if(sound.getClass() != CowSound.class) throw new IllegalArgumentException("Only works with cow sounds!");
}
}
Run Code Online (Sandbox Code Playgroud)
#getSound 工作得很好(当我抑制 IDE Unchecked 覆盖警告时)。然而,#setSound 在这里并不强制执行 CowSound,我宁愿 IDE/编译器强制执行此操作,而不是在运行时抛出异常。
我想要使用 #setSound 方法执行的操作如下: …