0

私はオーダークラスを持っています:

public abstract class Order {
protected String location;
protected double price;

public Order(double price, String location){
    this.price = price;
    this.location = location;
}
public abstract double calculateBill();

public String getLocation() {
    return location;
}
public double getPrice() {
    return price;
}
public abstract String printOrder(String format);       
}

これは、「NonProfitOrder」、「RegularOrder」、および「OverseasOrder」という 3 つのサブクラスによって拡張されます。これらはそれぞれ、計算方法のみが異なりますBill()。

次に、 OrderManger クラスがあります

public class OrderManager {
private ArrayList<Order> orders;

public OrderManager() {

}
public OrderManager(ArrayList<Order> orders) {
    this.orders = orders;   
}   
public void addOrder(Order o) {
    orders.add(o);
}   
public ArrayList<Order> getOrdersAbove(double val) {
    for (Order o : orders) {
        double bill = o.calculateBill();
        if (bill > val)
            orders.add(o);
    }
    return orders;
}   
public int numOrders() {
    return orders.size();
}   
public String printOrders() {
    for (Order o : orders){
        String format = "Long";
    }
    return printOrders("Long");
}
public String printOrders(String type) {
    for (Order o : orders) {

    }       
}
public double totalBill() {
    double sum = 0;
    for(Order o : orders) {
         sum = o.calculateBill();
    }
    return sum;     
}   
}

「type」が「Regular」、「Overseas」、または「NonProfit」である「type」のすべての注文の文字列を返すprintOrders(String type)に問題があることを除いて、すべてが正しく機能していると思います. 私の質問は、配列リストをループして特定の「タイプ」のオブジェクトのみを返す正しい方法は何ですか?

4

1 に答える 1

1

ここでの簡単な解決策は次のとおりです。

public String printOrders(Class orderClass) {
    StringBuilder sb = new StringBuilder();
    for (Order o : orders) {
        if(o.getClass().equals(orderClass))
        {
            sb.append(o.printOrder()).append("\n");
        }
    }
    return sb.toString();       
}

次に、メソッドを呼び出すと:

String orderString = orderManager.printOrders(NonProfitOrder.class);
System.out.println(orderString);
于 2013-09-19T16:41:35.613 に答える