特定枚举类型的“集合”但具有泛型

特定枚举类型的“集合”但具有泛型,第1张

特定枚举类型的“集合”但具有泛型

要指定接口的绑定并使其成为枚举,您需要一个通用 交集 ,该 交集 如下所示:

class MyClass<T extends Enum<T> & SomeInterface> {}

请注意,在将一个类和一个接口相交时,该类必须出现在接口之前。

在这种情况下,所需的通用功夫要复杂一个级别,因为TrainingActions枚举的接口本身必须引用动物类型。

class Trainer<A extends Animal, T extends Enum<T> & TrainingActions<A>> {}

根据您发布的代码,一个完整的工作示例可以编译为:

public class Animal {}public interface TrainingActions<T extends Animal> {}public abstract class Trainer<A extends Animal, T extends Enum<T> & TrainingActions<A>> {    private Set<T> completed = new HashSet<T>();    public void trainingComplete(T t) {        completed.add(t);    }}public class Dog extends Animal {};public class DogTrainer extends Trainer<Dog, DogTrainer.Trainables> {    public enum Trainables implements TrainingActions<Dog> {        BARK, BITE, ROLLOVER, FETCH;    }}

但是,我将更进一步,并

TrainingActions
Animal
它们适用的特定类中定义几个枚举:

public class Dog extends Animal {    public enum BasicTrainables implements TrainingActions<Dog> {        SIT, COME, STAY, HEEL;    }    public enum IntermediateTrainables implements TrainingActions<Dog> {        BARK, BITE, ROLLOVER, FETCH;    }    public enum AdvacedTrainables implements TrainingActions<Dog> {        SNIFF_DRUGS, FIND_PERSON, ATTACK, GUARD;    }};public class PuppyTrainer extends Trainer<Dog, Dog.BasicTrainables> {}public class ObedienceTrainer extends Trainer<Dog, Dog.IntermediateTrainables> {}public class PoliceTrainer extends Trainer<Dog, Dog.AdvacedTrainables> {}


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5507710.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-13
下一篇 2022-12-13

发表评论

登录后才能评论

评论列表(0条)

保存