2016-06-22 15 views
-1

Ich habe eine Klasse namens Chefs, wo es drei constructors.Like ist so:Wie referenziere ich ein Objekt mit einem Namen in einem Konstruktor und ich weiß nicht, was dieser Name ist?

public Chef(String chefName, double noodleStock) { 
    this.chefName = chefName; 
    this.noodleStock = noodleStock; 
    this.bowlsCooked = 0; 
} 
public Chef(String chefName, double noodleStock, double vegStock) { 
    this.chefName = chefName; 
    this.noodleStock = noodleStock; 
    this.vegStock = vegStock; 
    this.bowlsCooked = 0; 
} 
public Chef(String chefName, double noodleStock, double vegStock, 
    double porkStock) { 
    this.chefName = chefName; 
    this.noodleStock = noodleStock; 
    this.vegStock = vegStock; 
    this.porkStock = porkStock; 
    this.bowlsCooked = 0; 
} 

In einer Methode, die jeden Koch Aktien, werde ich setNoodleStock benötigen, beispielsweise durch einen Wert ihres aktuellen Bestand hinzugefügt .

Wie kann ich sicherstellen, dass ich den richtigen Koch verweisen? Der einzige Unterschied zwischen den einzelnen Köchen wird ihr Name und die Anzahl der Argumente in ihrem Konstruktor sein.

+0

By the way, 'das (chefName, noodleStock)' würden Ihnen ein paar Zeilen Code hier –

+0

speichern Wenn der Name zwischen jedem Koch unterschiedlich ist, warum kann man sich nicht mit Namen verweisen? – azurefrog

+3

Es ist überhaupt nicht klar, was Sie meinen - bitte stellen Sie [mcve] zur Verfügung, damit wir Ihnen helfen können. –

Antwort

0

Sie kennen den richtigen Chef von Spur von ihnen zu halten.

Chef chef1 = new Chef(...); 
Chef chef2 = new Chef(...); 
Chef chef3 = new Chef(...); 

Es spielt keine Rolle, welchen Konstruktor Sie verwenden. Dann Lager zu chef2 hinzuzufügen, verwenden Sie

chef2.addNoodleStock(amount); 

Natürlich müssen Sie die Methode addNoodleStock schreiben().

0

Vorausgesetzt Sie haben eine setNoodleStock() Methode in Ihrem Chef Klasse definieren, dh

public class Chef { 

    ... instance variables ... 

    public Chef(String chefName, double noodleStock) { 
     ... 
    } 

    public Chef(String chefName, double noodleStock, double vegStock) { 
     ... 
    } 

    public Chef(String chefName, double noodleStock, double vegStock, 
     double porkStock) { 
     ... 
    } 

    public void setNoodleStock(double stock) { 
     this.noodleStock = stock; 
    } 

} 

Dann später, wenn Sie erstellen Chef Objekte, je nachdem, welche Sie setNoodleStock() anrufen wird seine Lager gesetzt haben:

Chef chef1 = new Chef("First Chef", 2.0); 

Chef chef2 = new Chef("Second Chef", 1.0); 

chef1.setNoodleStock(4.0); // chef1 now has 4.0 noodles, chef2 still has 1.0 

chef2.setNoodleStock(5.0); // chef1 has 4.0 noodles from above, chef2 now has 5.0 
0

Wie kann ich sicherstellen, dass ich den richtigen Koch verweisen?

Das wäre etwas getan, wo Sie tatsächlich einen Verweis auf eine Instanz von Chef haben. Die Verwendung verschiedener Konstruktoren ändert nichts an einer Instanz Chef.

Wenn Sie eine Chef durch eine String name referenzieren müssen, dann sollten Sie wahrscheinlich eine Map<String, Chef> verwenden.

Chef joe = new Chef("joe", 0); 
Map<String, Chef> chefs = new HashMap<String, Chef>(); 
chefs.put(joe.getName(), joe); 

sonst irgendwo ...

Chef joe = chefs.get("joe"); 

jedoch an diesem Punkt, warum nicht nur die Chef joe Instanz verwenden Sie bereits mit einem Namen deklariert?