10

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

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

有这种修饰符的解决方法吗?

也许有一种方法可以使包最终化,因此其他程序员不能将任何类添加到我的包中?

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

还是我只需要离开它,只使用受保护的,其他程序员可能会在我的包中添加类......

4

1 回答 1

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());
}
于 2013-04-12T10:40:07.373 回答