次のコードがコンパイルされます。
import java.util.ArrayList;
public class ClassTest
{
private ArrayList<Class<? extends Interface1>> testClass =
new ArrayList<Class<? extends Interface1>>();
private interface Interface1 {}
}
ただし、次のコードでは 6 つのエラーが発生します。
import java.util.ArrayList;
public class ClassTest
{
private ArrayList<Class<? extends Interface1 & Interface2>> testClass =
new ArrayList<Class<? extends Interface1 & Interface2>>();
private interface Interface1 {}
private interface Interface2 {}
}
エラー:
ClassTest.java:5: > expected
private ArrayList<Class<? extends Interface1 & Interface2>> testClass =
^
ClassTest.java:5: ';' expected
private ArrayList<Class<? extends Interface1 & Interface2>> testClass =
^
ClassTest.java:5: <identifier> expected
private ArrayList<Class<? extends Interface1 & Interface2>> testClass =
^
ClassTest.java:6: > expected
new ArrayList<Class<? extends Interface1 & Interface2>>();
^
ClassTest.java:6: '(' or '[' expected
new ArrayList<Class<? extends Interface1 & Interface2>>();
^
ClassTest.java:6: illegal start of expression
new ArrayList<Class<? extends Interface1 & Interface2>>();
^
コンパイラが&
の複数の一般的な境界に使用されていることを認識していないことは明らかですClass
。の型パラメーターで複数の境界を許可していませんClass
か? と の両方を実装ArrayList
するClass
es が必要な場合はどうすればよいですか?Interface1
Interface2
動機:現在取り組んでいるコードには、次のような宣言がたくさんあります。
private static HashMap<String, Class<? extends ApproximativeMode>> approximativeMethod =
new HashMap<String, Class<? extends ApproximativeMode>>();
特定の計算を行うための「メソッド」を含むクラスに文字列をマップします。個別のハッシュマップはそれぞれ、クラスに異なるワイルドカードを使用します (そのため、正確なメソッドをすべて含むハッシュマップApproximativeMode
に置き換えられる場合がありExactMode
ます)。
すべてのメソッドを調べて、完全な表示名を取得するメソッドを持つ新しいインターフェイスを実装するようにしましたNamedMethod
(たとえば、「線形ヒドロキシアデニン メソッド」)。ここで、すべてのハッシュマップを に入れ、ハッシュマップをArrayList
調べて完全な名前を表示するイテレータを記述できるようにします。だから私は次のようになるかもしれません:
近似法
フォンアーセン等。
オーウェン等。
等
正確な方法
サンタルシア等。
LHM
等
等
したがって、ArrayList
すべてのハッシュマップを保持するという私の宣言は次のとおりです。
private ArrayList<Hashmap<String, Class<? extends NamedMethod>>> namedMethods;
もちろん、実際にはそのタイプのハッシュマップはありませんが、NamedMethod
それぞれのワイルドカードに追加して、ArrayList
すべてのハッシュマップを取得できることを望んでいました。明らかにそれは不可能です。
これが明確でない場合は、お知らせください。修正します。