有没有正确的方法将特定的javascript语句转换为java?

时间:2014-10-23 19:12:43

标签: java javascript coding-style

我正在将程序从JavaScript翻译成Java SE。

我在JavaScript中找到了这个声明:

var ROAD = {
  LENGTH: { NONE: 0, SHORT:  25, MEDIUM:  50, LONG:  100 },
  CURVE:  { NONE: 0, EASY:    2, MEDIUM:   4, HARD:    6 }
};

我用以下Java类翻译它:

public class Road {
public static final LengthLevel LENGTH = new LengthLevel();
public static final CurveLevel CURVE = new CurveLevel();
}

class LengthLevel {
public static final int NONE   = 0,
                        SHORT  = 25,
                        MEDIUM = 50,
                        LONG   = 100;
}

class CurveLevel {
public static final int NONE   = 0,
                        EASY   = 2,
                        MEDIUM = 4,
                        HARD   = 6;
}

我从Netbeans 8收到了几个警告:

a)在类Road中,警告是“通过公共API导出非公共类型”。

b)在其他地方使用常数时,例如

Road.LENGTH.MEDIUM

警告是“访问静态字段MEDIUM”和“替换为类引用”。

现在,我理解了警告的含义。我知道如果在自己的文件中将LengthLevel和CurveLevel都声明为public,它们将会消失。

因此,我的具体问题是翻译原始Javascript语句的方式是否较为冗长。

谢谢,

2 个答案:

答案 0 :(得分:0)

您可以使用enums

public class Road {
    public enum LENGTH {
        NONE(0), SHORT(25), MEDIUM(50), LONG(100);
        private final int length;

        LENGTH(int length) {
            this.length = length;
        }

        public int getValue() {
            return length;
        }
    }

    public enum CURVE {
        NONE(0), EASY(2), MEDIUM(4), HARD(6);
        private final int curve;

        CURVE(int curve) {
            this.curve = curve;
        }

        public int getValue() {
            return curve;
        }
    }
}

然后,您可以使用以下方法调用来访问该值:

        int longLength = Road.LENGTH.LONG.getValue();

答案 1 :(得分:0)

我想如果你真的喜欢以与Javascript中相同的方式引用这些值,你可以做这样的事情(它的优秀代码是否是另一个问题):

public class Road {
    public static final _LENGTH LENGTH = new _LENGTH();
    private static class _LENGTH {
        public static final int NONE = 0;
        public static final int SHORT = 25;
        public static final int MEDIUM = 50;
        public static final int LONG = 100;
    }

    public static void main(String[] args) {
        // Example access
        System.out.println(Road.LENGTH.LONG);
    }
}