是否可以使用多种枚举类型:
public enum Parameter {
XMETRIC, YMETRIC,..
并使用这些类型重载方法?
method(Parameter.XMETRIC type) {}
method(Parameter.YMETRIC type) {}
我知道你可以使用switch case并得到相同的结果,但我发现这很奇怪,这是不可能的。
答案 0 :(得分:4)
枚举常量不是类型,它们是引用相应enum
类型实例的变量。所以,不,你不能将它们用作参数类型。
答案 1 :(得分:1)
使用枚举,可以覆盖每个枚举常量的方法。也可以使用带参数的构造函数。
public enum Parameter {
XMETRIC() {
@Override
public void method() {
}
},
YMETRIC() {
@Override
public void method() {
}
},
...
ZMETRIC();
private Parameter() {
}
public void method() {
}
}
在java 8中可以使用lambdas:
public enum Parameter {
XMETRIC(() -> { System.out.println(Parameter.this); }),
YMETRIC(() -> { ... }),
...
ZMETRIC(null);
private final Runnable method;
private Parameter(Runnable method) {
this.method = method;
}
public void callMethod() {
if (method != null) {
method.run();
}
}
}
答案 2 :(得分:0)
ENUM本身是类型,但常量不是。
说你有:
enum Roles{
GUEST,
USER,
ADMIN;
}
您可以将Roles
作为参数传递给public void someMethod(Roles role)
。
案例
//Some code
someMethod(Roles.ADMIN);
要明确回答您的问题,不可能。常量不能表示为数据类型。
答案 3 :(得分:0)
首先,java没有运行时方法重载。 因此,根据参数的运行时类,无法在1方法和其他方法之间切换。
其次,运行时类型重载根据变量的值不起作用。
所以简而言之,没有。你不能拥有
public void someMethod(1)
public void someMethod(2)
分别触发1或2。 就像你不能使用枚举一样。
重载java的唯一类型是编译时。
下式给出:
public class A {
}
public class B {
}
public void someMethod(A a) { System.out.println("a"); }
public void someMethod(B b) { System.out.println("a"); }
以下调用将产生以下结果:
A a = new A();
A secretB = new B();
B b = new B();
someMethod(a); // prints a
someMethod(secretB); // prints a
someMethod(b); // prints b
someMethod(null); // doesn't compile, you have to cast so A or B
someMethod((B) null); // prints b