如何拥有一个类中的几种枚举类型之一的参数

itz

我有一个包含多个枚举的类,这些枚举表示不同类型的设备的名称。

public class DeviceNames {
    public enum Microsoft {
        DeviceName1, DeviceName2, DeviceName3
    }

    public enum Apple {
        DeviceName1, DeviceName2, DeviceName3
    }
}

我有不同的具体设备将实现的接口(该接口指定了其通信方式)

public interface IPDevice{
    //factory method
    Device createNewIPDevice(DeviceNames.Enum<E> deviceName);
}

public interface USBDevice{
    //factory method
    Device createNewUSBDevice(DeviceNames.Enum<E> deviceName);
}

我有一个抽象课

public abstract class Device {
    String deviceName;

    protected Device(String deviceName) {
        this.deviceName = deviceName;
    }
}

以及实现一个或多个接口的抽象类的具体实现

public class MicrosoftDevice implements IPDevice{
    @Override
    public Device createNewIPDevice(DeviceNames.Microsoft deviceName) {
        return super(deviceName.toString());
    }
}

public class AppleDevice implements IPDevice, USBDevice {
    @Override
    public Device createNewIPDevice(DeviceNames.Apple deviceName) {
        return super(deviceName.toString());
    }

    @Override
    public Device createNewUSBDevice(DeviceNames.Apple deviceName) {
        return super(deviceName.toString();
    }
}

我想使用枚举来确保它们仅给出有效的设备名称(而不是它们通过字符串传递)

如何让接口方法采用可以采用通用枚举类型但仅包含DeviceNames类中的枚举的参数?

itz

在这里问了一个后续问题接受的答案解决了这个问题。

引用@Andreas(回答另一个问题的人)

您使接口本身实际采用通用参数

工作代码如下所示(此处未包含的代码保持不变):

public interface IPDevice<DeviceName extends Enum> {
    //factory method
    Device createNewIPDevice(DeviceName deviceName);
}

public interface USBDevice<DeviceName extends Enum> {
    //factory method
    Device createNewUSBDevice(DeviceName deviceName);
}

public class MicrosoftDevice implements IPDevice<DeviceNames.Microsoft> {
    @Override
    public Device createNewIPDevice(DeviceNames.Microsoft deviceName) {
        return super(deviceName.toString());
    }
}

public class AppleDevice implements IPDevice<DeviceNames.Apple>, USBDevice<DeviceNames.Apple> {
    @Override
    public Device createNewIPDevice(DeviceNames.Apple deviceName) {
        return super(deviceName.toString());
    }

    @Override
    public Device createNewUSBDevice(DeviceNames.Apple deviceName) {
        return super(deviceName.toString();
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何创建一个类,使其对象之一与VB中另一个类的类型相同?

来自分类Dev

如何创建一个类,使其对象之一与VB中另一个类的类型相同?

来自分类Dev

如何判断哪个类拥有一个指针

来自分类Dev

类型提示一个函数,该函数接受几种类型之一的(同质)序列

来自分类Dev

EfCore 3 和拥有类型在同一个表中,你如何设置拥有的实例

来自分类Dev

在Delphi中,如何拥有一个实现IComparable并从TEqualityComparer继承的类?

来自分类Dev

在模板中,我如何拥有一个柜台?

来自分类Dev

如何在两个文件中拥有一个类和超类(Typescript)

来自分类Dev

如何在两个文件中拥有一个类和超类(Typescript)

来自分类Dev

重载运算符的模板:错误:重载的“ operator *”必须至少具有一个类或枚举类型的参数

来自分类Dev

如何遍历一个类中的几个枚举

来自分类Dev

如何声明另一个类中的枚举?

来自分类Dev

如何在Android的另一个类中调用带有View类型参数的函数

来自分类Dev

如何在另一个集合中拥有一个集合?

来自分类Dev

在一个类中定义一个公共枚举有什么好处?

来自分类Dev

如何将模板参数固定为基于另一个模板参数的一个枚举类?

来自分类Dev

如何在整个执行 ant taskdef 操作的过程中拥有一个单例类的实例

来自分类Dev

在一个类字段中处理一个Spring Bean /接口的几种实现

来自分类Dev

类型是几种具体功能之一

来自分类Dev

如何使一个类有条件地返回其他两个类之一?

来自分类Dev

如何定义一个包含模板参数的枚举类型(C ++)

来自分类Dev

如何在android的布局的多个组件中拥有一个唯一的按钮?

来自分类Dev

如何在android的布局的多个组件中拥有一个唯一的按钮?

来自分类Dev

描述参数的通用类型,可以是几种类型之一

来自分类Dev

如何在实体框架中拥有一个只有外键的表

来自分类Dev

如何拥有一个自动滚动的TextView

来自分类Dev

如何拥有一个非矩形的div?

来自分类Dev

如何拥有一个自动滚动的TextView

来自分类Dev

如何拥有一个细胞的数量?

Related 相关文章

  1. 1

    如何创建一个类,使其对象之一与VB中另一个类的类型相同?

  2. 2

    如何创建一个类,使其对象之一与VB中另一个类的类型相同?

  3. 3

    如何判断哪个类拥有一个指针

  4. 4

    类型提示一个函数,该函数接受几种类型之一的(同质)序列

  5. 5

    EfCore 3 和拥有类型在同一个表中,你如何设置拥有的实例

  6. 6

    在Delphi中,如何拥有一个实现IComparable并从TEqualityComparer继承的类?

  7. 7

    在模板中,我如何拥有一个柜台?

  8. 8

    如何在两个文件中拥有一个类和超类(Typescript)

  9. 9

    如何在两个文件中拥有一个类和超类(Typescript)

  10. 10

    重载运算符的模板:错误:重载的“ operator *”必须至少具有一个类或枚举类型的参数

  11. 11

    如何遍历一个类中的几个枚举

  12. 12

    如何声明另一个类中的枚举?

  13. 13

    如何在Android的另一个类中调用带有View类型参数的函数

  14. 14

    如何在另一个集合中拥有一个集合?

  15. 15

    在一个类中定义一个公共枚举有什么好处?

  16. 16

    如何将模板参数固定为基于另一个模板参数的一个枚举类?

  17. 17

    如何在整个执行 ant taskdef 操作的过程中拥有一个单例类的实例

  18. 18

    在一个类字段中处理一个Spring Bean /接口的几种实现

  19. 19

    类型是几种具体功能之一

  20. 20

    如何使一个类有条件地返回其他两个类之一?

  21. 21

    如何定义一个包含模板参数的枚举类型(C ++)

  22. 22

    如何在android的布局的多个组件中拥有一个唯一的按钮?

  23. 23

    如何在android的布局的多个组件中拥有一个唯一的按钮?

  24. 24

    描述参数的通用类型,可以是几种类型之一

  25. 25

    如何在实体框架中拥有一个只有外键的表

  26. 26

    如何拥有一个自动滚动的TextView

  27. 27

    如何拥有一个非矩形的div?

  28. 28

    如何拥有一个自动滚动的TextView

  29. 29

    如何拥有一个细胞的数量?

热门标签

归档