web-dev-qa-db-ja.com

クラスとインターフェースからのみ静的インポート

私のコードはEclipseで正常にコンパイルされますが、コマンドラインから(Rubyベースのビルダーシステムを介して)コンパイルしようとすると、次のエラーメッセージが表示されます。

static import only from classes and interfaces

パブリック静的フィールドの静的インポートは許可されていないことを示唆します。この問題の診断に役立つものを探す必要がありますか?どうすれば修正できますか?

更新: @ Tedの要求ごとに、参照ファイルの定数宣言:

public static final String NULL = "<NULL>";

および参照ファイル内の(bowdlerized)参照:

import static my.path.MyClass.NULL;
20
Carl Manaster

私の推測では、Eclipseとビルダーは異なるJavaコンパイラバージョンまたは異なるコンパイラフラグを使用しています。Java 7コンパイラ( バグID:715906 )特定のフィールドを静的にインポートすると、このエラーが発生します。回避策は、ワイルドカードの静的インポートを使用することです。

import static pkg.Class.staticField;

これを行う:

import static pkg.Class.*;
14
Ted Hopp

遅い答えですが、私はちょうど同様の問題を抱えてそれを理解しました。このページを見つけた他の人に役立つ場合に備えて投稿します...

大規模なマージとリファクタリングの後で、誤ってテストクラスをsrc/test/Javaではなくsrc/main/Javaに配置したときに、同様のエラーが発生しました。 JUnitの依存関係はscope = testsであったため、純粋なMavenでは機能しませんでした。たぶんあなたは同じ問題を抱えています

8
Collin Peters

私もこのエラーが発生し、私の問題は、テストソースファイルでのjunit4パッケージの厄介な静的インポートであることが判明しました。

私は以下を持っていました:

import static org.junit.Assert.fail;
import static org.junit.jupiter.api.Assertions.assertArrayEquals;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTimeout;

import static org.junit.Assert.fail;を削除し(そもそもどうやってそれをそこに入れることができたのかわかりません)、すべてが機能しています。

3
M Watson

誤ってtestディレクトリをソースとして設定しました。また、テストソースはソースファイルと見なされていました。

sourceSets.main.Java.srcDirs 'src'

| --src
| -メイン
| -テスト

修正:

sourceSets.main.Java.srcDirs 'src/main'
1
VenomVendor