[英]Overload using Enum types
是否有幾種枚舉類型:
public enum Parameter {
XMETRIC, YMETRIC,..
並使用這些類型的方法重載?
method(Parameter.XMETRIC type) {}
method(Parameter.YMETRIC type) {}
我知道您可以使用開關盒並獲得相同的結果,但我發現這是不可能的。
枚舉常量不是類型,它們是引用相應enum
類型的實例的變量。 因此,不,您不能將它們用作參數類型。
使用枚舉可以覆蓋每個枚舉常量的方法。 也可以使用帶參數的構造函數。
public enum Parameter {
XMETRIC() {
@Override
public void method() {
}
},
YMETRIC() {
@Override
public void method() {
}
},
...
ZMETRIC();
private Parameter() {
}
public void method() {
}
}
在Java 8中,可以使用lambda:
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();
}
}
}
ENUM本身是類型 ,但是常量不是。
說您有:
enum Roles{
GUEST,
USER,
ADMIN;
}
您可以將Roles
作為參數傳遞,例如so- public void someMethod(Roles role)
。
事例
//Some code
someMethod(Roles.ADMIN);
要明確回答您的問題,那是不可能的。 常量不能表示為數據類型。
首先,java沒有運行時方法重載。 因此,無法基於參數的運行時類在一種方法和另一種方法之間切換。
其次,運行時類型重載基於變量的值不起作用。
簡而言之,不。 你不能有
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.