[英]Refer to value of enum itself in static method of an enum
我有一個帶有靜態方法的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 );
如何在靜態方法中引用enum變量的當前值(請參見上面的代碼中的***)?
在您的示例中,您在SpeedUnits instance
上調用convertToIntegerKnots方法。 方法的行為取決於此實例。 因此,該方法不應只是靜態的,您可以使用this
來引用在其上調用該方法的實例:
public int convertToIntegerKnots( int value ){
if( this == knots) return value;
if( this == feetpersecond ) return (int)( value * 0.592483801295896 );
}
但是,將方法定義為抽象方法,並在每個枚舉實例中覆蓋它,這與使用getAbbreviation()
方法完全一樣會更加清潔。
靜態方法中沒有枚舉的當前值。 使其變為非靜態后,可以使用this
來引用當前值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.