栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

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

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> {}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/516554.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号