3

使用したいクラスを含む .jar があります: FooBar.class 。このクラスはパッケージではなく、.jar のルート ディレクトリにあるだけです。

.jar をライブラリとしてプロジェクトに追加しましたが、パッケージに含まれていないため、インポート方法がわからないという問題があります。

単純に行うimport FooBar;と、エラーが発生します: 、と表示されているため、どこでもクラス. expectedを使用できません。FooBarSymbol not found

何か案は?

4

2 に答える 2

4

デフォルトのパッケージからインポートすることはできません。とにかく、あなた(またはそれを書いた人)はデフォルトのパッケージを使用すべきではありません。非常に小さなサンプル プログラムを除いて、デフォルト パッケージの使用は避けるべきです。

それがあなたのコードである場合は、本来あるべきパッケージに入れます。それが他の誰かのものである場合、彼らがあなたのためにそれを瓶詰めするのに時間をかけている場合、彼らはそれをパッケージに入れることができます.

または、インポートを省略しますが、コンパイル時にjarをクラスパスに追加することを忘れないでください。

あるいは、あなたが怠け者で、すべてのベスト プラクティスを無視することを気にしない場合 (つまり、これがおもちゃのプログラムである場合など)。

$ jar -xvf <whatever>.jar

jar から現在のディレクトリにファイルを抽出し、その時点で通常どおり使用できます。Windows を使用している場合は、.zip ファイルを処理するプログラムであれば、おそらくこれを実行できます。.jar は、マニフェストを含む .zip にすぎません。

于 2013-03-10T01:00:12.417 に答える
0

これはリフレクションでできると思います。

編集2:

わかりました、おそらくあなたは反射を必要としません。Test を直接インスタンス化した別のテストを行ったところ、うまくいきました。上記のポスターが言ったように、クラスファイルをインポートしようとせずに、クラスパスにjarを配置するだけです。

編集:なぜ反対票を投じるのですか?私は絶対に正しかった。

// No package statement here
public class Test {
  public String getMessage() {
    return "Hello World!";
  }
}

$ javac Test.java
$ jar cvf my.jar Test.class

// No import statements needed
public class TestRefl {
  public static void main(String[] args) throws Exception {
    Class c = Class.forName("Test");
    Test t = (Test) c.newInstance();
    System.out.println(t.getMessage());
  }
}

$ javac TestRefl.java
$ java -classpath ".:my.jar" TestRefl
$ Hello World!

デフォルトのパッケージからクラスをインポートする必要さえありません。そして今、あなたはそれのインスタンスを持っているので、あなたは何でもしたいことができます.

于 2013-03-10T00:53:05.570 に答える