例如,我有这个类输出我在java doc" Flight.java"中的详细航班输出。 :
public String toDetailedString() {
String output =
getDeparture() + " - " + getArrival() + "\n" + Airport.getAirportCity(source) + " (" +
source + ") - " + Airport.getAirportCity(destination) + " (" + destination + ")" +
"\n" + plane.getAirline() + " " + number + " * " + plane.getModel();
return output;
}
我有一个行程班" Itinerary.java"我想从Flight.java中提取信息而不使toDetailedString为静态,这可能吗? 有关添加的信息,您看到的每个变量"来源,编号,目的地" Flight.java中的所有私有变量,我知道它是封闭的封装。任何帮助都非常有价值。
Itinerary.java中的示例实现
public String toString() {
return "The total cost is" + getTotalCost() + Flight.toDetailedString();
}
更新:
在我的Flight构造函数中,我有:
public Flight(Plane plane, String number, double cost, Time departure, int duration, Airport source, Airport destination) {
this.plane = plane;
this.number = number;
this.cost = cost;
this.departure = departure;
this.duration = duration;
this.source = source;
this.destination = destination;
}
我在其中创建了对象" f1"在我的ItineraryTest课程中:
Flight f1 = new Flight(new Plane(Airline.American, "Airbus A321"),
"495",
79,
new Time(7, 10), 100,
Airport.PHX, Airport.LAX);
因此我将我的对象链接到toDetailedString()对象" f1"被重命名为" first"在我的Itinerary.java中创建了另一个名为" f2"并转移到"第二" (为避免混淆):
public String toString() {
return "The total cost: "
+ getTotalCost()
+ " "
+ first.toDetailedString()
+ second.toDetailedString();
}
我以为我回答了自己的问题,但现在收到错误:
线程中的异常" main" java.lang.NullPointerException at Itinerary.toString(Itinerary.java:117)at java.lang.String.valueOf(String.java:2994)at java.io.PrintStream.println(PrintStream.java:821)at ItineraryTest.main(ItineraryTest.java:20)
答案 0 :(得分:0)
可能的,clean选项是创建另一个名为FlightToDetailedString
的类,其中包含(可能是静态的)方法toDetailedString
。该方法将接受Flight
的实例作为参数
class FlightToDetailedString {
public String toDetailedString(Flight flight) {
String output =
getDeparture() + " - " + getArrival() + "\n" + Airport.getAirportCity(source) + " (" +
source + ") - " + Airport.getAirportCity(destination) + " (" + destination + ")" +
"\n" + plane.getAirline() + " " + number + " * " + plane.getModel();
return output;
}
}
在我的示例中,方法不是静态的。对于非静态成员,FlightToDetailedString
可以拥有(toDetailedString
} FlightToDetailedString
类的FlightToDetailedString
字段。例如,Airport可能是toDetailedString
的成员变量。你确定要把自己限制在一个机场吗?
为什么你不喜欢Flight
作为{{1}}类的非静态成员?在示例中,您给出它是最自然的解决方案。如果您的行程需要访问Flight类的详细信息,只需将Flight对象的实例作为参数传递!
答案 1 :(得分:0)
toDetailedString()
的消费者无需访问Flight
内的任何内容。
您NullPointerException
可能是由Flight
实例中的某个字段null
引起的。
最后,考虑使用StringBuilder
而不是连接字符串。