![](/img/trans.png)
[英]How to write a generic method that takes two arguments of the same types in java?
[英]Write generic method which takes enum and string as arguments
請建議。 假設我有兩個枚舉,如下所示。 如果枚舉值與我的字符串匹配,我正在執行任務。
public enum Action {
DO("DO"),
REDO("REDO"),
ROLLBACK("DONT");
private String value;
private Action(String value) {
this.value = value;
}
public String getValue() {
return this.value;
}
}
public enum Days {
WEEK("WORK"),
LEAVE("DONT WORK");
private String value;
private Days(String value) {
this.value = value;
}
public String getValue() {
return this.value;
}
}
我希望下面的工作對這兩種情況都是通用的:
//any String
String sp ="do";
Arrays.stream(Action.values()).forEach(e ->{
if(e.getValue().equalsIgnoreCase(sp)){
//System.out.println(sp); Some work to do here
}
} );
在這段代碼中,你唯一需要的就是這兩個枚舉:
Arrays.stream(Action.values()).forEach(e ->{
if(e.getValue().equalsIgnoreCase(sp)){
//System.out.println(sp); Some work to do here
}
} );
是getValue
方法。
因此,您可以創建一個具有此方法的接口:
interface HasValue {
String getValue();
}
使兩個枚舉都實現接口:
public enum Action implements HasValue {
...
}
public enum Days implements HasValue {
...
}
然后你可以寫一個泛型方法:
public <T extends HasValue> void foo(T[] values, String sp) {
Arrays.stream(values).forEach(e ->{
if(e.getValue().equalsIgnoreCase(sp)){
//System.out.println(sp);
}
});
}
你可以這樣稱呼它:
foo(Action.values(), sp);
foo(Days.values(), sp);
該方法實際上不必是通用的。 你可以這樣做:
public void foo(HasValue[] values, String sp) {
...
}
如果您無法更改Days
或Action
,則可以使用功能接口:
public <T> void foo(T[] values, Function<T, String> getValue, String sp) {
Arrays.stream(values).forEach(e ->{
if(getValue.apply(e).equalsIgnoreCase(sp)){
//System.out.println(sp);
}
});
}
// usage:
foo(Action.values(), Action::getValue, sp);
foo(Days.values(), Days::getValue, sp);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.