带有票证的类中的Java数组列表

时间:2017-04-17 18:52:35

标签: java

我在java中实现Ticket类。 这是我的代码:

public class Ticket {

private String name;
private Float defaultPrice;
private Event event;
private static ArrayList<Ticket> ticketList;

public Ticket(String name, Float defaultPrice) {
    this.name = name;
    this.defaultPrice = defaultPrice;
}

public ArrayList<Ticket> getAllTickets() {
    return ticketList;
}

我的主要问题是如何创建Ticket类的实例,ticketList具有新创建的Ticket对象。因为后来我使用公共getAllTickets()方法来获取所有票证。 提前谢谢!

3 个答案:

答案 0 :(得分:1)

我无法发表评论所以我必须回答。 您是否意味着每当创建一张票时,您需要将每张票存储在列表中?

如果是这样,请将构造函数设为私有并提供工厂方法。

像这样:

public class Ticket {

private String name;
private Float defaultPrice;
private Event event;
private static ArrayList<Ticket> ticketList;

static {
    ticketList = new ArrayList<>();
}

private Ticket(String name, Float defaultPrice) {
    this.name = name;
    this.defaultPrice = defaultPrice;
}

public static ArrayList<Ticket> getAllTickets() {
    return ticketList;
}`

public static Ticket getInstance(String name, Float defaultPrice)
{
    Ticket temp = new Ticket(name, defaultPrice);
    ticketList.add(temp);
    return temp;
}

答案 1 :(得分:1)

完整示例:

    package stackoverflow;

    import java.math.BigDecimal;

    public class Ticket {

        private String     name;
        private BigDecimal defaultPrice;

        public Ticket(String name, BigDecimal defaultPrice) {
            this.name = name;
            this.defaultPrice = defaultPrice;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name =

 name;
    }

    public BigDecimal getDefaultPrice() {
        return defaultPrice;
    }

    public void setDefaultPrice(BigDecimal defaultPrice) {
        this.defaultPrice = defaultPrice;
    }
}

活动类:

package stackoverflow;


import java.util.ArrayList;
import java.util.Date;
import java.util.List;

public class Event {

    private Date         date;
    private List<Ticket> ticketList;

    public Event(Date date) {
        this.date = date;
        this.ticketList = new ArrayList<>();
    }

    public void addTicket(Ticket ticket) {
        this.ticketList.add(ticket);
    }

    public List<Ticket> getTicketList() {
        return this.ticketList;
    }
}

主要课程:

package stackoverflow;


import java.math.BigDecimal;
import java.util.Date;

public class Main {

    public static void main(String[] args) {
        Event eventX = new Event(new Date());

        eventX.addTicket(new Ticket("ticket1", new BigDecimal(50)));
        eventX.addTicket(new Ticket("ticket2", new BigDecimal(50)));
        eventX.addTicket(new Ticket("ticket3", new BigDecimal(50)));
        eventX.addTicket(new Ticket("ticketPremium", new BigDecimal(100)));

        for (Ticket ticket: eventX.getTicketList()) {
            System.out.println("name:" + ticket.getName() + " price: " + ticket.getDefaultPrice());
        }

    }
}

答案 2 :(得分:0)

选项1
如果您正在尝试确保每个新票证都将自己添加到自己的票证列表中,则可以在构造函数中轻松处理:

public Ticket(String name, Float defaultPrice) {
    this.name = name;
    this.defaultPrice = defaultPrice;
    this.ticketList = new ArrayList<Ticket>();
    this.ticketList.add(this);
}


选项2
您还可以使用单独的类方法将票证添加到列表,而在初始化新票证时使用该方法。例如,您的Ticket类将具有以下内容:

public void addTicketToList(Ticket ticket){
    this.ticketList.add(ticket);
}

然后,当您创建新票证时,您可以使用:

Ticket newTicket = new Ticket();
newTicket.addTicketToList(newTicket);