2017-05-29 4 views
-3

Entschuldigung für den irreführenden Titel, aber ich weiß wirklich nicht, wie ich mein Problem erklären soll.Zugriffsmethoden innerhalb einer Liste einer Klasse

Lets sagen, ich habe zwei clases, die erste Auto (ohne bekommt auf und im Beispiel)

public class Car{ 
    int id; 
    string model; 
    ArrayList<Specs> ListSpecs = new ArrayList<Specs>(); 
} 

Die zweite, Specs, enthält weitere Details des Autos:

public class Specs{ 
    float kilometers; 
    float passangers; 
    public float km_pass(float a, float b){ 
      return this.a/this.b; 
     } 
} 

Meine Hauptfrage ist nun, wie kann ich von einem Objekttyp Auto auf die Variable km_pass zugreifen? Versucht etwas wie

Example Car = new Car(); 
Car.setId(123); 
Car.setModel("Abc"); 
ListDetails Specs = new Specs(); 
Car.SetSpecs(ListDetails); 

Car.SetSpecs.SetKilometers(123); //wont work 

Ist mein Beispiel klar genug?

Danke!

+1

geben Sie den Klassen Getter/Setter –

+0

Es ist eine Liste, also müssen Sie einen Index angeben. – ElDuderino

+0

Auch wenn ich eine Methode hatte die Klasse Specs SetKilometers, wie im cde gesagt (Getter und Setter sind nicht enthalten) die letzte Zeile des Beispiels wnt Arbeit, können Sie ein Beispiel geben, wie ich es tun musste? –

Antwort

1

Sie haben es hier mit einer Liste zu tun, es ist wichtig zu beachten, dass die Liste ein völlig anderes Objekt ist als die darin enthaltenen.

Ich denke, Sie denken über die Liste als (gedruckte) Seite eines Menüs, wo, wenn Sie einen Artikel ändern möchten, müssen Sie die gesamte Seite ändern, das ist falsch. Stellen Sie sich die Liste als einen Schrank vor, wenn Sie ein Objekt darin ändern möchten, Sie ändern nicht den ganzen Schrank, nur den Gegenstand in einer Schublade.


Wie dies auf Ihre Situation gilt: Liste sollte der Schrank sein.

Spec, sollten die Elemente in den Schubladen sein (jede Position der Liste ist eine Schublade)

Wenn Ihr setSpecs Methode sieht wie folgt aus:

void setSpecs (List<Spec> specs) { 
    this.listSpecs = specs; 
} 

Es bedeutet, dass jedes Mal, wenn setSpecs nennen Du veränderst tatsächlich das ganze Kabinett.

Es ist möglich, dass Sie wollen stattdessen ein spec hinzufügen, es in etwa so aussehen würde:

void addSpec (Spec spec) { 
    this.listSpecs.add(spec); 
} 

Und eine Spezifikation aus der Liste wie diese würde zu bekommen:

// think of index as the number of the drawer where the spec is stored. 
Spec getSpec (int index) { 
    // actually gets the spec from the list 
    return this.listSpecs.get(index) 
} 

und das Beispiel:

// Create a new car 
Car car = new Car(); 
// Configures the car 
car.setId(123); 
car.setModel("Abc"); 
// Create a new spec 
Spec spec = new Spec(); 
// Configures the spec 
spec.setKilometers(123); 
// Adds spec to the car's list 
car.addSpec(spec); 
// gets the first spec of the list 
Spec firstSpec = car.getSpec(0); 
+0

Mhh Ich denke, das hat mir geholfen, genau herauszufinden, was ich wollte! Vielen Dank Kumpel :) –

Verwandte Themen