在枚举的静态方法中参考枚举本身的值

时间:2014-12-09 19:17:30

标签: java enums static-methods

我有一个带有静态方法的Java枚举,我想在方法中引用枚举的值:

public enum SpeedUnits {
    knots { @Override public String getAbbreviation(){ return "kts"; } },
    feetpersecond { @Override public String getAbbreviation(){ return "fps"; } };

    public abstract String getAbbreviation();
    public static SpeedUnits forAbbreviation( String sAbbreviation ){
        if( sAbbreviation == null ) return null;
        if( sAbbreviation.equalsIgnoreCase( "kts" ) ) return knots;
        if( sAbbreviation.equalsIgnoreCase( "fps" ) ) return feetpersecond;
        return null;
    }
    public static int convertToIntegerKnots( int value ){
        if( *** speed-type-goes-here *** == knots) return value;
        if( *** speed-type-goes-here *** == feetpersecond ) return (int)( value * 0.592483801295896 );
    }
}

所以,例如,我想调用convert如下:

SpeedUnits eMySpeedUnit = SpeedUnits.feetpersecond;
int knots = eMySpeedUnit.convertToIntegerKnots( 80 );

如何在静态方法中引用枚举变量的当前值(参见上面代码中的***位置)?

2 个答案:

答案 0 :(得分:3)

在您的示例中,您在instance SpeedUnits上调用convertToIntegerKnots方法。并且该方法的行为取决于此实例。因此该方法应该不是静态的,您可以使用this引用调用该方法的实例:

public int convertToIntegerKnots( int value ){
    if( this == knots) return value;
    if( this == feetpersecond ) return (int)( value * 0.592483801295896 );
}

但是将方法定义为抽象方法并在每个枚举实例中覆盖它会更加清晰,就像使用getAbbreviation()方法一样。

答案 1 :(得分:2)

静态方法中没有枚举的当前值。在使其成为非静态之后,您可以使用this来引用当前值。