0

データを分析するコードをいくつか作成しましたが、一般的な処理ではなく、データの非常に特定のソースに合わせて調整されたコードが必要であることに気付きました。個々のソースは時間とともに変化する可能性があり、考慮すべきさまざまなソースがすでにいくつかあります。このケースに対処するために、私は Java から完全なスタンドアロン プログラムを起動していました。それは素晴らしいことですが、これにはいくつかの問題があり、代わりに動的クラス ローディングを使用することにしました。私は v 1.1 から Java を使用しており、ほとんどの Java の問題に精通していますが、この特定のタスクでは、間違ったバージョンの Java を使用しているのではないかと考えています。私のバージョンでは認識されていません。私が考えていた多分私は重要なインポートステートメントを省略しましたか?

従うべきいくつかの良い例を見つけました。その中で最も良い例は、私がやりたいことを正確に実行しているため、次のようです。http://media.techtarget.com/tss/static/articles/content/dm_classForname/DynLoad.pdf

そこにあるコードの最初の例は、まさに私がやりたいことのようなものなので、そこからいくつかのビットを持ち上げました-私が自分でやっていたこと(私が苦労していたもの)とそれほど違いはありませんが、そうなるでしょう. t コンパイル - さまざまな「シンボルが見つかりません」というエラー。私のコードはもっとかさばるので、私はそれらをすべて単独で試してみましたが、私のコードと同じようにコンパイルできません! そのコードは次のとおりです。

public class DynamicLoader
{
   public static void main(String[] args) throws Exception
   {
      Class toRun = Class.forName(args[0]);
      Method mainMethod = findMain(toRun);
      mainMethod.invoke(null, new Object[] { args });
   }
   private static Method findMain(Class clazz) throws Exception
   {
      Method[] methods = clazz.getMethods();
      for (int i=0; i<methods.length; i++)
      {
         if (methods[i].getName().equals("main"))
         return methods[i];
      }
      return null;
   }
}

コンパイルしようとすると、次のようになります。

# javac DynamicLoader.java
DynamicLoader.java:11: error: cannot find symbol
   private static Method findMain(Class clazz) throws Exception
                  ^
  symbol:   class Method
  location: class DynamicLoader
DynamicLoader.java:8: error: cannot find symbol
      Method mainMethod = findMain(toRun);
      ^
  symbol:   class Method
  location: class DynamicLoader
DynamicLoader.java:13: error: cannot find symbol
      Method[] methods = clazz.getMethods();
      ^
  symbol:   class Method
  location: class DynamicLoader
3 errors

私の Java バージョン: javac 1.7.0_45

問題は非常に単純/基本的なものだと思いますが、ドキュメントを見ても手がかりはありません!

4

1 に答える 1

0

さて、粘り強さ!

なんらかのインポートの問題だと確信していましたが、実際にそうでした!

重要なのは、Method クラスが java.lang.reflect の一部であることを理解することでした。ただし、単に java.lang.reflect をインポートしただけではうまくいきませんでした。これが何をしたかです:

import java.lang.reflect.Method;

ここで役立つ情報を見つけました: http://www.programcreek.com/2013/09/java-reflection-tutorial/

これがオンライン ドキュメントからあまり明白ではないことに驚きましたが、まあ、何らかの形で私の見落としだったに違いありません.... これを特定するのが特に困難だった理由の 1 つは、"メソッド」は、Java に関する何十万もの記事に見られますが、正確に正しいことに焦点を当てた Web 検索を行うのは困難です。これが課題であったもう 1 つの理由は、必要な import 行が含まれていないこのコードを使用する例が多数あるためです。

于 2015-05-09T03:08:47.393 に答える