小编Voe*_*ter的帖子

如何在 Java 中的重写方法参数中强制执行 (Enum) 接口实现?

我在强制执行 (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 方法执行的操作如下: …

java generics parameters enums

1
推荐指数
1
解决办法
66
查看次数

标签 统计

enums ×1

generics ×1

java ×1

parameters ×1