0

以下に引用する Java クラスは、3 つの数値を使用します。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 に答える