Java-枚举通配符

我在实现Java功能时遇到一些问题。 我有一个“ 0”清单。我有不同的种类,它们都扩展了基类
Sensor
。 我在基类中有一些抽象函数,并且我希望这些函数将Enum作为参数。问题在于,每个子类的Enum都是唯一的,因此,我无法在基类中声明Enum。 下面的代码将“ 2”作为参数。我知道这不是合法的语法,但我只想说明一下,这就是我想将子类Enum作为参数的地方。
private Vector<Sensor> sensors;
public abstract class Sensor {  
    public Sensor() {}  
    public abstract int getParam(Enum param);  
    public abstract void setParam(Enum param, int value);  
}
public class TempSensor extends Sensor {
    // Parameter names
    public static enum TEMP_PARAMETERS{ PARAM_ALARM_HI, PARAM_ALARM_LO }

    public TempSensor() {}

    @Override
    public int getParam(TEMP_PARAMETERS param) {
            // Will do some stuff here
            return 0;
    }

    @Override
    public void setParam(TEMP_PARAMETERS param, int value) {
            // Will do some stuff here
    }
}
如果不同的Enums实现一个接口,则可以在抽象方法中将该接口用作参数类型,但是然后我可以将不属于相应类的Enums作为参数传递。有办法避免这种情况吗?     
已邀请:
        看起来您想要矛盾的事物。使用多态的全部目的是要利用替换原理。 如果要具有类层次结构,并确保将正确的类型输入到正确的对象,则可以考虑使用工厂模式。 我强烈建议不要继承Enums。 Java处理得不好。     
        您走在正确的轨道上。假设您有一个名为
MyEnumTypeInterface
的标记接口,只需让您不同的枚举实现该接口即可。然后将ѭ6用作接受枚举的方法的形式参数的类型。但是,您需要确保获得的枚举实现了
MyEnumTypeInterface
,而不仅仅是其他实现
MyEnumTypeInterface
的类:
public <E extends Enum<E> & MyEnumTypeInterface>void getParam(E e)
这样可以确保形式参数是
enum
,并实现
MyEnumTypeInterface
。该方法将不接受作为参数的另一个类,该类也实现
MyEnumTypeInterface
。 因此,您的课程最终看起来像这样:
public interface MyEnumTypeInterface {
}

public abstract class Sensor {  
    public Sensor() {}  
    public abstract <E extends Enum<E> & MyEnumTypeInterface>int getParam(E param);  
    public abstract <E extends Enum<E> & MyEnumTypeInterface>void setParam(E param, int value);  
}

public enum TempEnum extends MyEnumTypeInterface {
    PARAM_ALARM_HI, 
    PARAM_ALARM_LO
}


public class TempSensor extends Sensor {

    public TempSensor() {}

    @Override
    public<E extends Enum<E> & MyEnumTypeInterface>int getParam(E param) {
            return 0;
    }

    @Override
    public <E extends Enum<E> & MyEnumTypeInterface>void setParam(E param, int value) {
            // Will do some stuff here
    }
}
    
        因此,您想让每个ѭ1都使用特定的参数类型吗?那将意味着使“ 1”成为通用。
public abstract class Sensor<P extend Enum<P>> {  
    public Sensor() {}  
    public abstract int getParam(P param);  
    public abstract void setParam(P param, int value);  
}
您的设计可能存在更大的问题。修复这些问题可能会消除对get和set的需求。     

要回复问题请先登录注册