2012-04-08 30 views
2

我刚刚开始使用Java,但遇到以下代码有问题。我正在使用这样的东西从静态方法调用非静态应用方法,但我不认为它非常有效。我设置了需要应用的规则的数组列表,但是我无法使其运行。从对象数组列表中调用方法

ClassificationRule rules = new RuleFirstOccrnc(); 
    ClassificationRule rules1 = new RuleOccrncCount(); 
    rules.apply(aUserInput); 
    rules1.apply(aUserInput); 

试图从ClassificationRule调用apply()方法时,我得到这个错误“的方法适用(字符串)是不确定的ArrayList类型”。任何帮助将不胜感激!

package tweetClassification; 

import java.util.ArrayList; 

public class PrioritRuls { 

    //Set of rules to be applied 
    final static ArrayList<ClassificationRule> rulesA 
     = new ArrayList<ClassificationRule>(); 

    static{ 
     rulesA.add(new RuleFirstOccrnc()); 
     rulesA.add(new RuleOccrncCount()); 
    } 

    // ******************************************* 
    public static void prioritize(final String aUserInput){ 

     rulesA.apply(aUserInput); //ERROR 
     // The method apply(String) is undefined 
     // for the type ArrayList<ClassificationRule> 
     } 
} 
package tweetClassification; 

public class ClassificationRule { 

    // ******************************************* 
    public void apply (final String aUserInput) { 

     apply(aUserInput); 
     } 
} 

回答

3

正确的,因为你调用数组列表对象的apply方法,而不是数组列表的内容。

它更改为类似

rulesA.get(0).apply() 

或者,如果你要调用它的每一个元素,你需要通过列表进行迭代。

for (ClassificationRule rule:rulesA){ 
    rule.apply(aUserInput); 
} 
+0

非常感谢您的快速响应。不胜感激! – tom3322 2012-04-08 23:30:44

1

您正在尝试调用的ArrayListapply()而不是在ClassificationRule对象。 ArrayList没有这个方法,所以如预期的那样 - 你会得到一个编译错误。

你可能想迭代每个ClassificationRule对象的ArrayListapply()for-each loop

rulesA.get(someIndex).apply(aUserInput) 

一个多种:特定元素

for (ClassificationRule rule : rulesA) rule.apply(aUserInput) 

apply()事情:

public void apply (final String aUserInput) { 
    apply(aUserInput); 
} 

将导致无限递归调用apply() [好,不完全是无限的,它最终会抛出异常。这不是你目前的错误,因为这是运行时错误,而你仍然停留在编译时错误。

+0

非常感谢你的解释,我得到了它的工作。 :) – tom3322 2012-04-08 23:31:23

+0

你最欢迎@ tom3322,祝你好运!稍后请不要忘记[接受](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)其中一个答案。 – amit 2012-04-08 23:33:42

+0

关于apply()你如何建议我解决这个问题,我没有得到任何错误..我试图使用继承调用规则的非静态apply()方法。 – tom3322 2012-04-09 00:50:16

相关问题