当前位置: 首页 > 知识库问答 >
问题:

如何从类返回对象,以及当构造函数创建新的HashMap时,这个对象到底是什么?

楮乐邦
2023-03-14

我已经做了很多练习,这都有意义,但当我不得不自己从头开始编写代码时,我突然感到很困惑,如果有人能帮我一把,那就太好了。

我有:

public class Airplane {
  private HashMap<String,Integer> plane;
  public Airplane() {
    this.plane = new HashMap<String,Integer>();
  }
  public addAirplane(String id, int capacity) {
    this.plane.put(id,capacity);


 public class Flight {
   private HashMap<Airplane, List<String>> flight;
   public Flight() {
     this.flight = new HashMap<Airplane,List<String>>();
   public addFlight(Airplane airplane, String departurePort, String destinationPort) {
     this.flight.put(airplane, Arrays.asList(departurePort, destinationPort));
    }

然后我有另一个类,在这个类中创建Plane和Flight的实例,

private Airplane airplane = new Airplane();
private Flight flight = new Flight();

在大多数情况下,它似乎工作正常,但我不知道我应该在这里检索和添加什么…

flight.addFlight( //here I have Airplane's name//, departureAirport, destinationAirport);

共有1个答案

慕容成和
2023-03-14

好吧,我会试着解释你想要达到什么目的。看看这是不是你真正想要的。

假设您想为机场设计一个应用程序。让我们在这个时间点保持非常简单。您可以稍后为自己的用例扩展它。

让我们开始设计您的应用程序。

public class Airport {
    private List<Flight> allFlights;

    public List<Flight> getAllFlights() {
        return allFlights;
    }

    public void setAllFlights(List<Flight> allFlights) {
        this.allFlights = allFlights;
    }

    /**
     * Add flights
     * @param flight
     */
    public void addFlights(Flight flight){
        allFlights.add(flight);
    }

    /**
     * Delete flights
     * @param flight
     */
    public void deleteFlight(Flight flight){
        for(Flight eachFlight : allFlights){
            if(eachFlight.equals(flight)){
                allFlights.remove(eachFlight);
                break;
            }
        }
    }

    /**
     * Update specific flight info.
     * 
     * @param flightId
     * @param airplane
     * @param source
     * @param destination
     * @return
     */
    public boolean updateFlight(long flightId, Airplane airplane, String source, String destination){
        boolean isUpdated = false;
        for(Flight eachFlight : allFlights){
            if(eachFlight.getFlightId() == flightId){
                eachFlight.setAirplane(airplane);
                eachFlight.setSourceName(source);
                eachFlight.setDestinationName(destination);
                isUpdated = true;
                break;
            }
        }
        return isUpdated;
    }
}

每个Flight都有一个Airplane以及源和目的地Flight和Airplane只是普通的旧Java对象

public class Flight {
    private long flightId;
    private Airplane airplane;
    private String sourceName;
    private String destinationName;

    public long getFlightId() {
        return flightId;
    }

    public void setFlightId(long flightId) {
        this.flightId = flightId;
    }

    public Airplane getAirplane() {
        return airplane;
    }

    public void setAirplane(Airplane airplane) {
        this.airplane = airplane;
    }

    public String getSourceName() {
        return sourceName;
    }

    public void setSourceName(String sourceName) {
        this.sourceName = sourceName;
    }

    public String getDestinationName() {
        return destinationName;
    }

    public void setDestinationName(String destinationName) {
        this.destinationName = destinationName;
    }

    //Override equals method
}

public class Airplane {
    private long id;
    private String make;
    private String airlinesCompany;

    public Airplane(long id, String make, String airlinesCompany) {
        this.id = id;
        this.make = make;
        this.airlinesCompany = airlinesCompany;
    }

    public long getId() {
        return id;
    }

    public String getMake() {
        return make;
    }

    public String getAirlinesCompany() {
        return airlinesCompany;
    }
}

我希望这个设计能澄清你的想法。

 类似资料:
  • 问题内容: 在浏览一些旧代码时,我遇到了这个宝石: 第二行在Eclipse中被标记为无效代码,我知道为什么。似乎没有明确抛出任何异常,并且构造函数不可能抛出任何类型的异常(例如)。 我的问题是 为什么 要进行空检查?以前在Java的旧版本中,构造函数是否可以返回null?还是这仅仅是毫无用处的代码? 问题答案: 该代码在任何Java版本中均无效。构造函数不可能返回,即使构造函数会抛出异常,也不会调

  • 我编写了以下代码和驱动程序,但我不知道如何使用两个构造函数创建银行账户对象。一个构造函数获取初始余额,第二个构造函数在没有钱的情况下开设账户。此外,Account tBalance是否应该包括有效性检查? 或者,我可以执行以下操作: 将费用作为描述银行账户的一部分。根据需要更新BankAccount类。用户应该能够为每个帐户设置费用金额,并通过一种方法添加费用。向驱动程序添加代码以演示费用功能。(

  • 我在弄清楚如何根据给定的类型在构造函数中创建一个新对象时遇到了困难。 例如,我有一个机器人驱动程序,它有一个默认构造函数,不接受任何参数,并创建一个基本的机器人。但我有另一个构造器,根据这个论点创造了一个新的机器人。 是一个接口。那么,如果我想创建,使其是另一种类型,比如?我需要做一些类型的铸造吗?

  • 在ScalaMock的旧版本中,这段代码可以工作。在Scala2.12和Scalamock3.6中,我得到了一个NullPointerException,因为即使我创建了一个存根,它仍然在调用BrokenClass的构造函数的“s.length”行。所以它试图取消引用“s”,它是空的,因为我没有传递任何东西给它,因为我想要的只是一个存根,它在调用特定方法时返回一个特定值。 有没有一种方法可以在不调

  • 问题内容: 我想知道,是否可以创建对象池?这样我就可以从池中取出一个对象,一旦完成工作,就可以将其放入池中。 问题答案: 我想知道,是否可以创建对象池?这样我就可以从池中取出一个对象,一旦完成工作,就可以将其放入池中。 有可能。如果新对象的构建成本很高(例如建立数据库连接),或者由于其他原因GC带宽太高(在Android领域通常会出现问题),则可以在许多情况下看到性能提高。 以下是一些可用于实现池

  •  · · · >以下文章解释了为什么在使用第二种方法时需要小心:https://mayaposch.wordpress.com/2011/11/01/how-to-realt-realt-use-qthreads-the-full-explanation/  · · · >下面的文章解释了为什么这两种方法都有各自的优点:https://woboq.com/blog/qthread-you-were