我有以下示例类:
public class MyPermission implements Permission {
public static final String READ = "read";
public static final String UPDATE = "update";
public static final String DELETE = "delete";
@Override
public boolean isGranted(String permission) {
switch(permission) {
case READ: return read;
case UPDATE: return update;
case DELETE: return delete;
default: return false;
}
}
private boolean read;
public boolean isRead() { return read; }
public void setRead(boolean read) { this.read = read; }
private boolean update;
public boolean isUpdate() { return update; }
public void setUpdate(boolean update) { this.update = update; }
private boolean delete;
public boolean isDelete() { return delete; }
public void setDelete(boolean delete) { this.delete = delete; }
}
我想稍微简化一下,因为会创建更多这些类。架构始终相同:
- 一些
public final static String
权限(必须在注释中可访问) - 这些权限中的每一个都有一个相应的布尔字段
- 方法
isGranted
返回相应的布尔字段的值
正如您在示例代码中看到的那样:我已经编写了很多代码来实现这一点,但我不知道如何简化事情。
我可以想象两件事:
在构造函数内部调用
super(READ, UPDATE, DELETE);
,让超类isGranted(...)
通过反射处理方法。只需
super();
在构造函数内部调用,该类将public static final String
自行查找字段并动态创建字段和 getter/setter,因为我的代码中不需要它们 - 它们只需要在运行时存在。
或者 Java 8 中是否有任何很酷的新功能,所以我可以这样做:
public MyPermission() {
super(new HashMap<String, GetterMethod>() {{
put(READ, this::isRead);
put(UPDATE, this::isUpdate);
put(DELETE, this::isDelete);
}});
}
所以我可以动态调用相应的getter方法,比如:
public boolean isGranted(String permission) {
return permissionMap.get(permission).execute();
}
(甚至使用字段,而不是 getter 方法)
如果有一个简单而好的解决方案,那就太酷了:)
提前致谢!