簡體   English   中英

在枚舉的靜態方法中引用枚舉本身的值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM