2017-04-20 17 views
0

現在、双方向マップを作成しようとしています(私が見る限り)Javaでは提供していません。私のコードは以下の通りです。 Eclipseは私にエラー与えている双方向マップを作成するときに "方法の消去は別の方法と同じです"

private static final class ColourCharTwoWayMap<E,F> { 

    private ArrayList<E> eArrayList; 
    private ArrayList<F> fArrayList; 

    private ColourCharTwoWayMap() { 
     eArrayList = new ArrayList<E>(); 
     fArrayList = new ArrayList<F>(); 
    } 

    public void put(E colour, F ch) { 
     eArrayList.add(colour); 
     fArrayList.add(ch); 
    } 

    public F get(E colour) throws ArrayIndexOutOfBoundsException { 
     return fArrayList.get(eArrayList.indexOf(colour)); 
    } 

    public E get(F ch) throws ArrayIndexOutOfBoundsException { 
     return eArrayList.get(fArrayList.indexOf(ch)); 
    } 
} 

「メソッドget(E)の消去は型SaveManager.ColourCharTwoWayMap内の別の方法と同じです」。グーグルでは、Javaは同じことをするジェネリックメソッドや、オーバーライドとは何か、Javaではどのメソッドを使用するのかわからないことを理解しています。それはすべて私の頭の上に少しです。

上記のやり方をするより良い方法はありますか? (つまり、E型のオブジェクトを取り、F型のオブジェクトを返し、その逆のメソッドを返す)。

+0

ジャスト側の質問、なぜあなたが内部的に地図を使用していませんか? – Koekje

答えて

0

あなたの2つのget関数は、すでに暗示した型消去効果のため、同じパラメータ型 - java.lang.Objectを持ちます。関数名も同じでコンパイラが出てエラーが出るので、明らかに許可されていません。

ソリューションは簡単です、あなたの2つのゲッターに異なる名前を与えることであろう

0

良い方法のGeTeとGETFに名前を変更します。

0

2つの値のどちらかが特定の親クラスを持つと仮定した場合、IEはColorのように見えますが、Charはあなたの値ですが、タイプの消去を回避できますが、ColorとCharのサブ分類E extends ColorまたはF extends Char。これにより、それらをより「具体的」にでき、コンパイラは2つを区別することができます。ただし、ColorまたはCharが同じ親クラス、IEオブジェクトまたはStringから派生している場合は、異なるメソッドシグネチャを実装する必要があります。

IE public F getChByColour(E colour)public E getColourByChar(F char)

関連する問題