同じパッケージ内に以下のようなクラスを作成しましたtest
。Javaが本当にそれを許可するかどうかをテストするだけでした。そして、そうしますが、問題が発生します。
package test;
public class E {
}
package test;
public class T {
}
package test;
import test.E;
import test.T;
public class K<E, T> {
E e;
T t;
public K(E e, T t) {
this.e = e;
this.t = t;
}
public static void main(String[] args) {
K k = new K<E, T>(new E(), new T());
}
}
上記のコードは複数のコンパイルの問題を引き起こします
Multiple markers at this line
- Cannot make a static reference to the non-static type E
- Cannot make a static reference to the non-static type T
- Cannot make a static reference to the non-static type T
- Cannot make a static reference to the non-static type E
- K is a raw type. References to generic type K<E,T> should be
parameterized
Tと同じように、コンパイラがEとクラスEの間で混同されていることを明確に示しています。
したがって、回避策は、パッケージを使用して実際の型を定義することです。
K k = new K<test.E, test.T>(new test.E(), new test.T());
これらのクラスがすべて含まれている場合、default package
このコンパイルの問題を解決する方法はありません。質問は、Java でそのようなクラスの宣言を許可する必要があるdefault package
かどうかです。