我有一个班级collection<T> extends ArrayList()
对象lesCommandes是多个Commandes的集合
我从其中的Commandes类中存储了3个对象,当我想将方法应用于其中一个this.lesCommandes.get(1).xmlCommande()
时,我需要投射它或它不起作用((Commande)this.lesCommandes.get(1)).xmlCommande()
class Collection<T> extends ArrayList{}
this.commande1=new Commande(1,10,"filet 1kg",1,"10-12-2015","10-01-2016","en cours");
this.commande2=new Commande(2,15,"filet 5kg",1,"11-11-2015","10-02-2016","livrée");
this.commande3=new Commande(3,20,"caisse 10kg",2,"12-10-2015","10-03-2016","livrée");
this.lesCommandes.add(0, commande1);
this.lesCommandes.add(1, commande2);
this.lesCommandes.add(2, commande3);
xml=((Commande)this.lesCommandes.get(1)).xmlCommande();
答案 0 :(得分:1)
您必须扩展ArrayList<Commande>
,因此存储在其中的对象将保持Commande
类型
答案 1 :(得分:0)
首先提出一些关于设计的建议(如果可以的话)。
请勿对 撰写 使用 继承 。
extends
表示是一种关系,经常被滥用:您可以说GroupOfOrders
是 ListOfOrders
并定义以下内容(在这种情况下,它实际上意味着是以)实现的:
public GroupOfOrders extends List<Order> {...}
但是,通常最好根据组合来定义这种关系,并使用List<T>
来实现(隐藏)。
为什么? - 因为,
GroupOfOrders
的层次结构,而且您只能extends
一次,extends
从超类继承 all 公共受保护成员和受保护成员时。在您的情况下,这些方法不是(功能)域的一部分。您可能不希望允许您班级的客户应用List<T>
中的任何方法。GroupOfOrders
实际上更好地使用Set<T>
实施,则意味着您不会将重复的Order
授权为GroupOfOrders
如果不扩展'List . It can be very difficult if you extends
List`,客户端类在整个代码中使用方法,你可以轻松地做到这一点 - 如果有< em>外部客户端,您无法控制您的类的代码和用法。仅举例来说,我定义了Order
类(英语中的 commande order - 这只是与人分享的问题,我不知道t表示你需要翻译代码)
public class Order {
// properties, constructor...
public OrderResult executeOrder() {
// just do it
}
public String asXML() {
// generate the order as an XML string
}
}
public class GroupOfOrders {
private List<Order> orders = new ArrayList<>();
public void addOrder(Order o) {
// do some checking on order
orders.add(order);
}
public GroupedOrderResult executeAllOrders() {
GroupedOrderResult result = new GroupedOrderResult();
for (Commande c : commandes) {
OrderResult res = c.executeOrder();
result.add(c, res);
}
return result;
}
List<Order> getOrders() { return orders; }
}
也许,在程序的其他地方,当你需要将每个订单作为XML字符串时:
GroupOfOrders orders; // initialised with the different orders
for (Order o : orders.getOrders()) {
String xmlOrder = o.asXML();
// do what needs to be done with xmlOrder
}
你会注意到没有必要施放。
其次,对您提供的代码提出一些意见:
class Collection<T> extends ArrayList{}
这没有意义:ArrayList
已经实现了Collection
接口。可能是你的意思
List<T> lesCommandes = new ArrayList<Commande>();
this.commande1=new Commande(1,10,"filet 1kg",1,"10-12-2015","10-01-2016","en cours"); this.commande2=new Commande(2,15,"filet 5kg",1,"11-11-2015","10-02-2016","livrée"); this.commande3=new Commande(3,20,"caisse 10kg",2,"12-10-2015","10-03-2016","livrée"); this.lesCommandes.add(0, commande1); this.lesCommandes.add(1, commande2); this.lesCommandes.add(2, commande3);
只做
lesCommandes.add(commande1); etc..
List<T>$add(T)
实际上会在列表末尾添加并动态管理大小。
XML =((COMMANDE)this.lesCommandes.get(1))xmlCommande();
如果按照我的建议定义了lesCommandes
并且xmlCommande()
类中有Commande
方法,那么就这样做
xml = lesCommandes.get(1).xmlCommande();