高效重复检查Java中的多种类型的对象

时间:2014-06-16 10:20:08

标签: java performance list interface

我正在开展一个项目,我已经有多个类来保存从xml文件加载的数据。我想解决的问题是几乎所有的类都有这些方法:

  • addSingle [对象名]
  • addMultiple [对象名]

但是,类中可能有更多类型的对象需要以这种方式添加。例如:


    class Airspace {
        private List airports;
        private List waypoints;
    ...
       public void addSingleAirport(Airport a) {...}
       public void addMultipleAirports(Airport[] a {...}
       public void addSingleWaypoint(Waypoint w) {...}
       public void addMultipleWaypoints(Waypoint w) {...}

    }

我正在考虑将这些addSingleaddMultiple方法放入接口中,然后在实现方法时根据应添加列表的对象类型来决定,但不会这样做。这是愚蠢的吗?

有没有更有效的方法来做到这一点?我想避免将这些方法写入需要特定对象的每个类中,因为它们都完全相同。

3 个答案:

答案 0 :(得分:1)

我不认为你的方法是愚蠢的,但这种类型检查确实会影响性能。

尽管如此,扩展您的方法,我会保留一份由Class索引的列表地图:

class Airspace {
    private Map<Class, List<Object>> lists = new HashMap();

    public void addSingle(Object o)
    {
        List<Object> list = lists.get(o.getClass());
        if(list == null)
        {
            list = new ArrayList();
            lists.put(o.getClass(), list);
        }
        list.add(o);
    }
...
...    

答案 1 :(得分:0)

public void addAirports(Airport... a ){...}

应该能够处理所有案件 - 还是我错过了什么?

很一般

public void addThings( Object... o )

可以编写,但是你想丢失可读性和类型检查吗?如果对象中没有匹配的Foo列表,则运行时错误?颤动。

答案 2 :(得分:0)

您可以将Abstract类与泛型一起使用,然后从您的类扩展它。像这样:

public abstract class AbstractSomeclass<E>{
    public void addObject(E... obj, List<E>){
        //yourcode here 
    }
}

然后在你的课堂上:

public class MyClass extends AbstractSomeclass<Airport>{
    public List<Airport> list; 
    //.....
    public void someMethod(){
        super.addObject( airportObject, list );
    }
}

可能存在一些小错误(在此代码中),但坚持这个想法。