0

これは、子の一般的なリストを親に保持するために使用しているコードの簡略化されたバージョンです。これをコピーペーストではなく手で書き直さなければならないことを許してください。問題のあるマシンからコピーする方法はありません。

MyObject<childType extends MyObject> {}

public class Model{


  HashMap<MyObject, Set<MyObject>> store= new HashMap<MyObject, Set<MyObject>>()


  public <childType extends MyObject> Set<childType> getChildren(MyObject<childType> parent)
  {

     return (Set<childType>) store.get(parent);
  }



  public void <T extends MyObject<?>> addChild(MyObject<T> parent, T child){
     Set<MyObject> childSet=store.get(parent);

     if(childSet==null){
        childSet=new Set<MyObject>();
        store.put(parent, childSet);
     }

     childSet.add(child);
 }

これはEclipseで問題なくビルドされます。ただし、クラス ファイルを消去して Maven インストールを実行すると、次のエラーが発生します。

the parameter childType is not within its bound

getChildren の定義でエラーが発生します。私は以前、ストアをパラメータ化し、ストアを呼び出すクラスで Set にキャストする前に、別の、しかし同様の問題を抱えていました。

キャストしていない場合、一般にそのような例外が発生する理由を理解しています。私が混乱しているのは、私キャストしていることです。なぜそれがエラーをスローしてコンパイルを停止し、「私を信じて、それは正しい」と言って先に進むのではなく、キャストを受け入れるのか理解できません。

それが問題であれば、私は mavin-compile-pluging バージョン 1.6 を使用していると思います。

ps。私のコード例のフォーマットがとても醜い理由がわかりません。誰かがそれを修正できるか、修正する方法を教えてくれれば、私は感謝します. 今までその問題を抱えたことはありませんでした...

4

2 に答える 2

1

わかりました、ダブルキャスト、それは恐ろしいですが、うまくいきます:Mavenではなく、Eclipseでコンパイルするコードで同様の問題がありました:これにより、両方のケースで動作します(javafxバインディング): currentElement.bind((ObservableValue<? extends Element>) (ObservableValue) treeItem.valueProperty());. モデルを treeItem 画面値にバインドしています。

于 2016-07-11T13:13:23.573 に答える