2017-05-14 5 views
2

ein einfaches:Java-Konstruktor funktioniert nicht im selben Paket

Ich versuche, einen Konstruktor zu verwenden, um Objekte zu erstellen, aber meine Objekte werden leer erstellt. Der Konstruktor befindet sich in einer anderen Klasse innerhalb desselben Pakets.

public static void main(String[] args) { 

    //Initialize all data: 
    ArrayList<Airport_example> all_airports = new ArrayList<Airport_example>(); 

    Airport_example perth = new Airport_example("01","Perth","PER","Australia","WST"); 
    Airport_example brisbane = new Airport_example("02","Brisbane","BNE","Australia","EST"); 

    //Add airports to ArrayList 
    all_airports.add(perth); 
    all_airports.add(brisbane); 

      //debugging 
    System.out.println(all_airports); 
} 

Der Konstruktor in einer separaten Klasse sieht wie folgt aus:

public class Airport_example extends HashMap<String,String> { 

//list of variables 

private String airportID; 
private String city; 
private String code3; 
private String country; 
private String timezone; 

// constructor to initialize objects 
public Airport_example(String airportID, String city, String code3, String country, String timezone) { 
    // Constructor variable initialization 
    this.airportID = airportID; 
    this.city = city; 
    this.code3 = code3; 
    this.country = country; 
    this.timezone = timezone; 

} 

}

Die System.out.printin Anweisung ein leeres Array zurückgibt. Habe ich hier einen einfachen Trick verpasst?

[{}, {}] 
+3

Warum erwarten Sie, dass 'HashMap.toString()' die privaten Felder von 'Airport_example' kennt? Warum erweitern Sie HashMap überhaupt? – Siguza

+0

Warum würden Sie eine Hashmap erweitern? –

+1

Der Konstruktor funktioniert übrigens gut ... –

Antwort

6

Ihr Konstruktor funktioniert gut; Das Problem ist, dass Sie ein HashMap erweitern und erwarten, dass es den Inhalt der privaten Felder der Unterklasse Airport_example kennt. Damit Ihre Druckanweisungen wie gewünscht funktionieren, müssen Sie die Methode toString überschreiben.

Ich würde empfehlen, Ihren Code auf die folgende Veränderung:

public class Airport_example { 

private String airportID; 
private String city; 
private String code3; 
private String country; 
private String timezone; 

public Airport_example(String airportID, String city, String code3, String country, String timezone) { 
    this.airportID = airportID; 
    this.city = city; 
    this.code3 = code3; 
    this.country = country; 
    this.timezone = timezone; 
    } 
} 

public String toString() { 
    // replace the string you want each object to print out 
    return this.airportID + ", " + this.city + ", " + this.code3 + ", " + this.country + ", " + this.timezone; 
} 

Der Grund ist es ein leeres Array ist das Drucken, dass es derzeit HashMap ‚s toString und ruft, wie Sie die definieren keine der HashMap Felder behandelt es als eine leere HashMap.

Verwandte Themen