2014-06-16 38 views
1

我正在研究一个项目,其中有多个类用于保存从xml文件加载的数据。我想解决的问题是,几乎所有的类有这些方法:高效重复检查Java中多种类型的对象

  • 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方法为一个接口,然后决定,在实施方法时,根据对象的类型,其列出应该补充,但不会说愚蠢?

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

+0

我忘了提及所有这些方法检查提供的参数是否存在。 – crzpiot

+0

从XML文件加载数据:这可能不是手工编写这些JAva类的最佳方式。例如,有JAB,jc负责编写添加到列表所需的任何东西,等等。 – laune

回答

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

应该能够处理所有情况 - 或者我错过了什么?

一个非常普遍的

public void addThings(Object... o) 

可以写,但是你不想失去可读性和类型检查?运行时错误,如果对象中没有匹配的Foo列表?不寒而栗。

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

也许有一些小错误(这个代码),但坚持的想法。