Bir referans, Supplier
kullanarak bir getter yöntemine referanslar saklayabilir mi? Ben hataları derleme olmadan yazmayı bilemiyorumBir alıcıya sahip Enum
String value = myEnum.getValue(object)
:
böyle kullanımı olmak. O an seni yakalarsaBir referans, Supplier
kullanarak bir getter yöntemine referanslar saklayabilir mi? Ben hataları derleme olmadan yazmayı bilemiyorumBir alıcıya sahip Enum
String value = myEnum.getValue(object)
:
böyle kullanımı olmak. O an seni yakalarsaÇok zor değil.
public static class MyPoJo {
final String foo, bar;
public MyPoJo(String foo, String bar) {
this.foo = foo;
this.bar = bar;
}
public String getFoo() {
return foo;
}
public String getBar() {
return bar;
}
public int getBaz() {
return 5;
}
}
Sonra böyle enum olabilir:
public static enum Getters {
FOO(MyPoJo::getFoo), BAR(MyPoJo::getBar);
private final Function<MyPoJo, String> fn;
private Getters(Function<MyPoJo, String> fn) {
this.fn = fn;
}
public String getValue(MyPoJo object) {
return fn.apply(object);
}
}
Ve bu gibi kullanmak: Aşağıdaki Pojo sınıfı düşünün
System.out.println(Getters.FOO.getValue(new MyPoJo("fooValue", "barValue"))); // fooValue
İade etmek istiyorsanız sorunlu olacaktır Ancak farklı şekiller.
System.out.println(Getters.FOO.getValue(new MyPoJo("fooValue", "barValue"))); // fooValue
System.out.println(Getters.BAZ.getValue(new MyPoJo("fooValue", "barValue"))); // 5
böyle bir şey yapmak istiyorum: bütün alıcılar için dönüş tipi aynı ise
import java.util.function.DoubleSupplier;
public class Test {
enum MathConstants {
PI(Test::getPi), E(Test::getE);
private final DoubleSupplier supply;
private MathConstants(DoubleSupplier supply) {
this.supply = supply;
}
public double getValue() {
return supply.getAsDouble();
}
}
public static void main(String... args) {
System.out.println(MathConstants.PI.getValue());
}
public static double getPi() {
return Math.PI;
}
public static double getE() {
return Math.E;
}
}
neden yapmıyorsun 'valueOf()':
Kullanımı aynıdır: Bu durumda ben yerine enum önceden tanımlanmış durumlarda normal sınıfını kullanmak öneririm? 'String result = myEnum.valueOf (object); ' –
Başka bir nesnenin alıcısına bir başvuru kaydetmek istiyorum –
Şüphesiz, yapabilirsiniz. "enum" değerleri, Java nesneleridir, böylece sıradan nesnelerin yapabileceği her şeyi tutabilirler. Ancak, alıcılar bir örneğe bağlı olduğundan bahsediyorsanız, önerilen kod stili ve muhtemelen bir XY sorunu gibi görünmüyor. – Holger