java - 如何防止从特定类调用公共(public)方法

标签 java class public

我有一个现有的类,我想在其中添加一个方法。但我希望只从特定类的特定方法调用该方法。有什么方法可以阻止其他类/方法的调用吗?

比如我有一个现成的A类

public final class A
{
    //other stuff available for all classes/methods

    //I want to add a method that does its job only if called from a specific method of a class, for example:

    public void method()
    {
        //proceed if called from Class B.anotherMethod() else throw Exception
    }
}

一种方法是在 method() 中获取 StackTrace 然后确认父方法?

我正在寻找的是一种更干净、更可取的解决方案,例如模式或其他东西。

最佳答案

老实说,你在这里把自己逼到了墙角。

如果类 A 和 B 不相关且不属于同一包,则可见性无法解决问题。 (即使是这样,反射也可以用来破坏可见性规则。)

如果代码可以使用反射调用方法,静态代码分析将无法解决问题。

B.this 作为额外参数传递并检查到 A.method(...) 没有帮助,因为一些其他类 C 可以传递一个 B 实例。

这只剩下堆栈跟踪方法1...或者放弃并依靠程序员的良好感觉2不要调用他们不应该调用的方法。


理想的解决方案是重新审视让您陷入困境的设计和/或编码决策。


1 - 请参阅其他答案,了解使用注释、安全管理器等向应用程序程序员隐藏堆栈跟踪内容的示例。但请注意,在幕后,您每次方法调用可能会添加成百上千条指令开销。

2 - 不要低估程序员的判断力。大多数程序员在看到不要调用某些方法的建议时,很可能会遵循该建议。

关于java - 如何防止从特定类调用公共(public)方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5486797/

相关文章:

java - 即使我使用 Hibernate/Postgresql/JDBC,也需要手动锁定数据库吗?

java - 用图形填充#fillOval 看起来不对

c++ - 帮助解决这些警告。 [遗产]

java - 公共(public) Java 类或 Jar

php - 一个类中PHP公共(public)函数的顺序会影响它的执行吗?

java - 用于在字符串中查找日期的正则表达式

java - 数组类型参数的暴露程度相同

delphi - 如何从 Delphi 6 对象中获取类以分配给元类变量?

javascript - 将鼠标悬停在列表项上以更改不同 div 的属性

Java方法访问