gpt4 book ai didi

java - 限制Java中方法调用的访问

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:21:29 24 4
gpt4 key购买 nike

我有一个类 A。此类包含两个方法,比如 method1()method2()。现在我有另外两个名为 BC 的类。两个类都包含 A 类的相同实例。

现在我想限制访问,这样我的“B类只能调用method1()而我的其他C”类可以调用method2 ()。设计方案如下-

class A {
void method1(){/*-------------*/}
void method2(){/*-------------*/}
}

现在,如果我创建一个 A 的实例并将其共享给我的 BC

class B {
A ob;
public B(A ob) {
this.ob=ob;
}
public void process() {
ob.method1(); //only call method1()
ob.method2(); //can't access it.
}
}

class C {
A ob;
public C(A ob) {
this.ob=ob;
}
public void process() {
ob.method2(); //only call method2()
ob.method1(); //can't access it.
}
}

最佳答案

很简单:你不能。

与 C++ 中的“friend”概念相反,您只能更改所有 其他类的可见性。

换句话说:在 Java 中,你被包裹保护,保护,私有(private)和公共(public)困住了。没有“B 的私有(private)”和“C 的公共(public)”。

当然,您可以做一些非常奇怪的事情,比如一个方法分析它自己的堆栈跟踪,如果发现它被“错误”调用则抛出异常类(class)。但这样做很可能是不好的做法。

从这个意义上说,真正的答案是:退后一步,仔细看看这两种方法背后的功能。如果您真的认为这些函数需要不同可见性——那么很可能它们一开始就不应该属于相同类!因为它们可能实现两种非常不同的职责 - 好吧,任何类、方法...都应该有一个单一的职责。

最接近的是 smosel 的建议:您的类实现了不同的接口(interface),并且您确保客户通过“接口(interface)”接口(interface)使用您的类 - 然后他们可以调用的方法受到限制。但当然 - 客户端可以轻松地将接口(interface)引用转换为类引用,然后调用其他方法。

鉴于评论:单独使用的名称 表明了以上几点:当 A 是一个ConfigurationLoader - 为什么它包含一个方法来检查 配置? ConfigurationLoader 应该加载配置(由类 C 触发)——并且该操作的结果将是一个“配置”对象——然后类 B 将与该配置对象(而不是与 loader 交互)。

关于java - 限制Java中方法调用的访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45452840/

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