2015-12-08 1 views
1

Способ 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); 
    } 
} 

Теперь он утверждает, что не-статический метод getVocabulary из BayesianClassifier нельзя ссылаться из статического контекста здесь, как я понимаю, но как же тогда метод получит значение поля «лексика» из экземпляра байесовского классификатора, который вызывает этот метод? Это, безусловно, должно быть возможно без передачи всего словаря в качестве параметра или предоставления класса Category экземпляра байесовского классификатора в качестве поля?

+0

Что делать, если объект какого-либо другого класса называется вашим методом? Как вы узнаете, как получить желаемый индекс? –

+0

Что не так, просто передавая «лексику» в качестве параметра? Это не так долго, и не вызывает никаких проблем. Технически, однако, вы можете проанализировать трассировку стека с помощью Reflection (как правило, НЕ ДЕЛАЙТЕ ЭТО). См. Точный дубликат: http://stackoverflow.com/questions/15329566/how-to-find-the-object-that-called-a-method-in-java – bcsb1001

+0

Вообще говоря, метод - особенно публичный метод - ничего не знает о том, кто его вызвал. Он имеет только свои аргументы и объект, на который он был призван работать. И это хорошо. –

ответ

0

Как указано в комментариях это может быть сделано с отражением. Если вы не передача словаря в качестве параметра затем с ответом здесь: Previous Answer to Same Question

Если вы не хотите использовать Reflection у вас есть два варианта:

Вариант 1:

Просто пройти в объекте Vocabulary при вызове updateProbabilities. Java - pass-by-value, однако это не означает, что весь объект Vocabulary будет скопирован и передан. Это объясняется here. По существу, значение указателя на ваш объект будет передано, и при этом будет занимать лишнее пространство одного «указателя».

Вариант 2:

При создании Category объекта, добавьте BayesianClassifier как поле.

0

Вы можете использовать это, используя следующий код:

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

Да, я буду использовать это, спасибо! Я просто хотел проверить, есть ли способ сделать это, не добавляя экземпляр BayesianClassifier в качестве поля в категорию. Еще раз спасибо! – EmielBoss

 Смежные вопросы

  • Нет связанных вопросов^_^