我刚刚开始使用Java,而我遇到以下代码时出现问题。我使用这样的东西从静态方法调用非静态apply方法,但我认为它不是非常有效。我设置了一个需要应用的规则的数组列表,但我无法使其工作。
ClassificationRule rules = new RuleFirstOccrnc();
ClassificationRule rules1 = new RuleOccrncCount();
rules.apply(aUserInput);
rules1.apply(aUserInput);
尝试从ClassificationRule调用apply()方法时出现此错误“对于类型ArrayList,方法apply(String)未定义”。任何帮助将不胜感激!
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 );
}
}
答案 0 :(得分:3)
是的,因为你在数组列表对象上调用apply
方法,而不是数组列表的内容。
将其更改为
rulesA.get(0).apply()
或者,如果你想在每个元素上调用它,你需要遍历列表。
for (ClassificationRule rule:rulesA){
rule.apply(aUserInput);
}
答案 1 :(得分:1)
您正尝试在apply()
上调用ArrayList
,而不是ClassificationRule
对象。 ArrayList
没有这个方法,正如预期的那样 - 你得到一个编译错误。
您可能希望使用for-each loop在每个ArrayList
对象上迭代 apply()
和ClassificationRule
:
for (ClassificationRule rule : rulesA) rule.apply(aUserInput)
或特定元素上的apply()
:
rulesA.get(someIndex).apply(aUserInput)
还有一件事:
public void apply (final String aUserInput) {
apply( aUserInput );
}
将导致对<{1}}的无限递归调用[嗯,不完全无限,它最终会抛出异常]。这不是您当前的错误,因为这是运行时错误,而您仍然遇到编译时错误。