gpt4 book ai didi

私有(private)和保护之间的Java

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:59:22 28 4
gpt4 key购买 nike

我有一个类,它有一个方法,我希望它只能被它的子对象访问,而不能被这个包中的其他类访问。

Modifier    | Class | Package | Subclass | World
————————————+———————+—————————+——————————+———————
public | ✔ | ✔ | ✔ | ✔
————————————+———————+—————————+——————————+———————
protected | ✔ | ✔ | ✔ | ✘
————————————+———————+—————————+——————————+———————
no modifier | ✔ | ✔ | ✘ | ✘
————————————+———————+—————————+——————————+———————
private | ✔ | ✘ | ✘ | ✘
____________+_______+_________+__________+_______
my Modifier | ✔ | ✘ | ✔ | ✘
____________+_______+_________+__________+_______

是否有解决方法来使用这种修饰符?

也许有一种方法可以使包最终化,这样其他程序员就不能向我的包中添加任何类?

或者有没有办法获取调用函数的实例,并检查这个实例是否是我的 super 对象的实例?

或者我只需要离开它,只使用 protected ,其他程序员可能会向我的包中添加类...

最佳答案

1) 您不能在 Java 中创建自定义访问修饰符

2) 您可以将包裹密封在 jar 里,参见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());
}

关于私有(private)和保护之间的Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15969172/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com