在处理 Java 中的嵌套对象时 - 类似:// bad codegame.getPlayer().getState().getPositionInfo().getCurrent().getX();,不清楚嵌套引用是否会返回 null
当处理 Java 中的嵌套对象时 - 类似于:
// bad code
game.getPlayer().getState().getPositionInfo().getCurrent().getX();
,不清楚嵌套引用是否会返回 null 从而导致抛出 NullPointerException。
我的想法是有一个通用方法,它在检查空引用时调用引用路径,而不是抛出异常,而是返回空值。
错误处理超出了此解决方案的范围。
我的最小代码示例如下所示:
import java.util.function.Function;
public class Main {
public static void main(String[] args) {
// Check 1: baseline - "normal" function mappings
SAVE.TY_Baseline(b -> b.contains("a"), "aoiudssaiud"); // works
// Check 2: nested types
Team t = new Team(new Team(null));
Team t1 = SAVE.TY_Chained(() -> t.getTeam(), z -> z.getTeam()); // does not compile
// Check 3: String -> boolean -> String
String g = "Hi !";
// does not compile
Team t2 = SAVE.TY_Chained(() -> g.contains("Hi"), b -> b ? "contained" : "not contained");
}
public static class Team {
private Team t = null;
public Team(Team t) {
this.t = t;
}
public Team getTeam() {
return t;
}
}
public static interface SAVE {
public static <A, B> B TY_Chained(Function<Void, A> first , Function<A, B> second) {
A firstResult = first.apply(null);
if (firstResult == null)
return null;
return second.apply(firstResult);
}
public static <A,B> B TY_Baseline(Function<A,B> oo, A in) {
return oo.apply(in);
}
}
}