java - 我的方法(被另一个类调用)如何从该类获取变量而不将其作为参数传递?

标签 java methods static field getter

BayesianClassifier 中的方法调用以下方法(Category 的方法):

public void updateProbabilities(Map<String, int> woordfrequenties) {
    for (Map.Entry<String, int> woordfrequentie : woordfrequenties.entrySet()) {
        String woord = woordfrequentie.getKey();
        int frequentie = woordfrequentie.getValue();
        int index = BayesianClassifier.getVocabulary().indexOf(woord);
    }
}

现在,它指出来自 BayesianClassifier 的非静态方法 getVocabulary 不能从这里的静态上下文中引用,这是我理解的,但是该方法如何从调用该方法的 BayesianClassifier 实例中获取字段“vocabulary”的值呢?无需将整个词汇表作为参数传递,或者将 BayesianClassifier 实例作为字段提供给类 Category,这肯定是可能的?

最佳答案

正如评论中所述,可以通过反射来完成。如果您无法将词汇作为参数传递,那么请使用此处的答案:Previous Answer to Same Question

如果您不想使用反射,您有两个选择:

选项 1:

只需在调用updateProbativity时传入Vocabulary对象即可。 Java 是按值传递的,但这并不意味着整个 Vocabulary 对象都会被复制和传递。这是解释here 。本质上,将传递指向对象的指针的值,这样做只占用一个“指针”的额外空间。

选项 2:

创建 Category 对象时,添加 BayesianClassifier 作为字段。

关于java - 我的方法(被另一个类调用)如何从该类获取变量而不将其作为参数传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34166318/

相关文章:

java - 面向对象设计和在抽象父类(super class)中初始化静态成员

java - 如何将 Map<T,List<L>> 映射中的值添加到 List<L>?

javascript - javascript 中的 setTimeOut() 函数是什么?

java - 递归指数法

c# - 静态成员是否会阻止实例类被 GC 处理?

c++ - 类内的静态 constexpr 初始化链

java - Java 求一个数的各位数字之和

java - 从同一 Java 应用程序的两个实例顺序执行

java - calc() 类型方法中的 else if 语句返回不正确的值

c - 将函数指针传递给静态函数是否可能/安全/理智?