在Java中是否可以从对象的构造函数向地图添加对象?

时间:2018-08-24 00:27:40

标签: java constructor maps

不知道这是否可行,似乎无法在线找到答案,所以就去了。

我正在用Java构建广告竞标平台的模型,广告商在该平台上提交要约以在网站上展示广告,出价最高者获胜。

我创建了一个Bid对象(其中包含所提供的价格,广告网址和要跟踪的出价者的名称)和一个Auction对象,它实际上只是一个价格(以ints为单位)和Bids(作为Bid对象)的TreeMap。 / p>

我知道这是一件非常基本的事情,但是有可能让Bid对象构造函数将Bid添加到Auction中吗?只是坚持DRY原则?如果无法从构造函数中获取,是否可以在Main方法之外自动进行其他操作?

Bid.class

public class Bid {
private int cents;
private String location;
private String bidServer;

public Bid(int cents, String location, String bidServer) {
    this.cents = cents;
    this.location = location;
    this.bidServer = bidServer;

}

public int getCents() {
    return cents;
}

public String getLocation() {
    return location;
}

public String getBidServer() {
    return bidServer;
}

}

拍卖.class

import java.util.Map;
import java.util.TreeMap;

public class Auction {
private Map<Integer, Bid> bids ;

public Auction() {
    this.bids = new TreeMap<>();
}

public void addBid (Bid bid){
    bids.put(bid.getCents(), bid);
}

public Bid getHighestBid(){
    return bids.get(((TreeMap<Integer, Bid>) bids).lastKey());
}

public void clearBids(){
    bids.clear();
}

}

2 个答案:

答案 0 :(得分:1)

构造出价时,您可以传递Auction对象,然后像这样将Bid添加为this

public Bid(int cents, String location, String bidServer, Auction auction) {
    this.cents = cents;
    this.location = location;
    this.bidServer = bidServer;

    auction.addBid(this);
}

答案 1 :(得分:1)

addBid中更改方法Auction

public void addBid(int cents, String location, String bidServer) {
    Bid bid = new Bid(cents, location, bidServer);
    bids.put(cents, bid);
}

您可以将AuctionBid放在同一包中,并使Bid的构造函数为package.private。

此外,您应该像这样声明bids

private SortedMap<Integer, Bid> bids;

在这种情况下,您可以这样编写方法getHighestBid

public Bid getHighestBid() {
    return bids.get(bids.lastKey());
}