编写双向地图时如何绕过"Erasure of method is the same as another method"



im当前试图编写双向映射,因为(据我所知(Java不提供一个。我的代码如下。

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));
    }
}

eclipse给我带来了错误"方法get(e(的删除与类型savemanager.colourchartwowaymap中的另一种方法相同"。从谷歌搜索中,我知道Java不喜欢执行同样事情的通用方法,并且与覆盖和Java不知道使用哪种方法有关。这一切都在我的头上。

有什么更好的方法可以做我想做的事情?(即有一种采用E类型对象并返回F类型的对象的方法,反之亦然(。

您的两个获取函数具有相同的参数类型-Java.lang.Object,由于您已经提到的类型擦除效果。这显然不允许,因为功能名称也相同,并且编译器发出和错误。

解决方案很简单,将名称更改为gete and getf

更好的方法是给您的两个getters不同的名称。

如果两个值中的任何一个都应该具有特定的父类,则IE看起来像颜色,char是您的值颜色和字符,说E extends ColorF extends Char。这使他们更加"混凝土",并且编译器能够区分两者。但是,如果您的颜色或字符是从同一父类派生的,即对象或字符串,则需要实现不同的方法签名。

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

相关内容

  • 没有找到相关文章

最新更新