0

下面引用的 Java 类使用三个数值。我想从命令行调用这个类,每次通过 args 变量传递不同的值。但是当我这样做时,我得到一个“从内部类中访问变量 'args'”Java 错误。实现我的目标最有效的方法是什么(如果有的话)?

class UserBaseRecommenderEvaluation {

    private UserBaseRecommenderEvaluation() {}

    public static void main(String[] args) throws Exception {

        DataModel model = new FileDataModel(new File("/home/eualin/Downloads/ml-100k/final.data"));

        RecommenderBuilder builder = new RecommenderBuilder() {
            @Override
            public Recommender buildRecommender(DataModel model) throws TasteException {
                UserSimilarity similarity = new LogLikelihoodSimilarity(model);
                UserNeighborhood neighborhood = new NearestNUserNeighborhood(2, similarity, model);
                return new GenericUserBasedRecommender(model, neighborhood, similarity);
            }
        };

        RecommenderIRStatsEvaluator evaluator = new GenericRecommenderIRStatsEvaluator();
        IRStatistics stats = evaluator.evaluate(builder,
                null,
                model,
                null,
                1,
                GenericRecommenderIRStatsEvaluator.CHOOSE_THRESHOLD,
                1);        
    }     
}

更新:作为进一步的步骤,我怎样才能使上述函数在为每个参数分配不同值的 for 循环中工作?在这种情况下,请记住,还需要处理错误处理,否则执行将意外终止,因为某些组合将不“合适”。

4

2 回答 2

2

如果您只想访问参数中的值args,只需将其指定为final. 下面的示例将很好地编译和运行:

public class InnerClassExample {

  public static void main(final String[] args) {

    Runnable runnable = new Runnable() {

      @Override
      public void run() {        
        for (int i = 0; i < args.length; i++) {
          System.out.println(args[i]);
        }
      }
    };

    runnable.run();
  }
}

这打印:

1
2
3
于 2013-02-06T14:33:19.607 回答
1

您没有完成错误消息:)“需要声明为最终的”。

为了解决这个问题,您需要声明在您的内部类中访问的所有变量final。所以,因为main它会是:

public static void main(final String[] args) { ... }
于 2013-02-06T14:35:34.450 回答