java - 在枚举的静态方法中引用枚举本身的值

标签 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 );
    }
}

所以,例如,我想像下面这样调用转换:

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

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

最佳答案

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

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

但是将方法定义为抽象方法并在每个枚举实例中重写它会更简洁,就像您对 getAbbreviation() 方法所做的那样。

关于java - 在枚举的静态方法中引用枚举本身的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27387031/

相关文章:

java - 如何声明List类型的Interface变量并直接赋值?

java - 仅用不同颜色替换旋转图像的角

c++ - 模板函数特化问题

python - 模块函数 vs 静态方法 vs 类方法 vs 无装饰器 : Which idiom is more pythonic?

java - 共享可执行的 .jar 文件

java - 在Java逻辑中构建倒排索引

java - 为什么所有 opengl 枚举都是十六进制的?

Swift 右 CustomColor 类声明

java - 在 Java 中用对象调用静态方法会出什么问题?

c++ - 对静态变量和静态方法的 undefined reference