我有一个带有静态方法的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 );
如何在静态方法中引用枚举变量的当前值(参见上面代码中的***位置)?
答案 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
来引用当前值。