繁体   English   中英

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

[英]How can my method, which is being called by another class, obtain a variable from that class without passing it as a parameter?

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”的值? 是否一定有可能不将整个词汇作为参数传递,或者不给类Category的BayesianClassifier实例作为字段?

您可以使用以下代码来使用它:

public class Category {
private final BayesianClassifier bayesianClassifier;

public Category(BayesianClassifier bayesianClassifier) {
  this.bayesianClassifier = bayesianClassifier;
}

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);
    }
} 

要么

public class Category {
private BayesianClassifier bayesianClassifier;

public void setBayesianClassifier(BayesianClassifier bayesianClassifier) {
  this.bayesianClassifier = bayesianClassifier;
}

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

要么

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

如评论中所述,可以通过反射来完成。 如果您不能将词汇作为参数传递,请在此处输入答案: 上一个问题的答案

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

选项1:

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

选项2:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM