我正在开展一个项目,我已经有多个类来保存从xml文件加载的数据。我想解决的问题是几乎所有的类都有这些方法:
但是,类中可能有更多类型的对象需要以这种方式添加。例如:
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) {...} }
我正在考虑将这些addSingle
和addMultiple
方法放入接口中,然后在实现方法时根据应添加列表的对象类型来决定,但不会这样做。这是愚蠢的吗?
有没有更有效的方法来做到这一点?我想避免将这些方法写入需要特定对象的每个类中,因为它们都完全相同。
答案 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 );
}
}
可能存在一些小错误(在此代码中),但坚持这个想法。