我有一个场景,根据一个变量的值,我将不同的其他变量设置为null。类似于:
switch (object.getControllerVariable()){
case "A":
object.setB(null);
object.setC(null);
break;
case "B":
object.setA(null);
object.setC(null);
break;
case "C":
object.setA(null);
object.setC(null);
break;
}现实生活中的场景比这要宽一些,而且将来可能会增长。我想要做的是创建一个与所有设置器一起创建的列表,在开关中删除不应该执行的列表,并以相同的值调用它们。这能做到吗?
发布于 2018-11-19 19:59:21
您可以将所有这些设置器存储到一个列表中。
我要做的是把它们存储在HashMap<String, Consumer<TypeOfObject>>中
HashMap<String, Consumer<TypeOfObject>> setters = new HashMap<>();
setters.put("A", x -> x.setA(null));
setters.put("B", x -> x.setB(null));
setters.put("C", x -> x.setC(null));然后你可以做这样的事情:
setters.entrySet().stream()
.filter(x -> !x.getKey().equals(object.getControllerVariable()))
.forEach(x -> x.getValue().accept(object));发布于 2018-11-19 19:45:22
我想如果你离开一个开关,你会有更好的运气。例如,类似这样的东西可能会奏效:
String skip = object.getControllerVariable();
if (!"A".equals(skip)) {
object.setA(null);
}
if (!"B".equals(skip)) {
object.setB(null);
}
if (!"C".equals(skip)) {
object.setC(null);
}仍然有点冗长,但我认为这是无法逃避的。为了提高可读性,您可以考虑将其包装在一个方法中:
private void nullOtherFields(Thing object, String skip) {
...发布于 2018-11-19 20:05:24
我觉得你需要一些像倒影这样的东西。假设您有这样一个类:
public class Person {
private String firstName;
private String lastName;
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
}
然后,您需要在这个类中执行一个或多个带有某些条件的方法。在Java中,我们有一个名为反射的API,它支持运行时执行。在本例中,这个类中有两个方法,当我们想调用它们时,我们有如下代码:
Person person = new Person();
Object result = person.getClass().getMethod("getFirstName").invoke(person);通过反射,您可以实例化任何类的实例,用任何返回类型调用类中的任何方法,或者使用任何条件输入args。
https://stackoverflow.com/questions/53381463
复制相似问题