我有一个带有方法的类,我希望它只能用于其子对象,而不能用于此包中的其他类。
Modifier | Class | Package | Subclass | World
————————————+———————+—————————+——————————+———————
public | ✔ | ✔ | ✔ | ✔
————————————+———————+—————————+——————————+———————
protected | ✔ | ✔ | ✔ | ✘
————————————+———————+—————————+——————————+———————
no modifier | ✔ | ✔ | ✘ | ✘
————————————+———————+—————————+——————————+———————
private | ✔ | ✘ | ✘ | ✘
____________+_______+_________+__________+_______
my Modifier | ✔ | ✘ | ✔ | ✘
____________+_______+_________+__________+_______
是否有解决方法来使用这种修饰符?
也许有办法让一个包最终,所以其他程序员不能在我的包中添加任何类?
或者有没有办法获取调用该函数的实例,并检查这个是否是我的super
对象的实例?
或者我只需要保留它,只使用受保护的,其他程序员可能会在我的包中添加类...
答案 0 :(得分:6)
1)您无法在Java中创建自定义访问修饰符
2)你可以将包装密封在罐子里,见http://docs.oracle.com/javase/tutorial/ext/security/sealing.html
3)你可以找到调用类,试试
public static void main(String[] args) throws Exception {
xxx();
}
static void xxx() {
Class[] cc = new SecurityManager() {
@Override
protected Class[] getClassContext() {
return super.getClassContext();
}
}.getClassContext();
System.out.println(cc[cc.length - 1].getName());
}