0

私は私の中にこのコードを持っていますmain()

public static void main(String[] args) {
        // TODO Auto-generated method stub
        Customer forrest = new Customer("Forrest Gump", 1, "42 New Street, New York, NY"); 
        Customer random = new Customer("Random Name", 2, "44 New Street, New York, NY"); 
...
}

ID 番号を指定して顧客のインスタンスを返すようにコードを作成するにはどうすればよいですか (たとえば、1 を指定するとフォレストが返され、2 を指定するとランダムが返されます)

4

7 に答える 7

3

メインで Customer オブジェクトを作成すると、どこかに保存しない限り、メインにのみ存在します。

例えば:

public static void main(String[] args) {
    Customer c = new Customer ( ... );
    // c exists here
}
public static void doSomething() {
    // c does not exist here
}

新しいオブジェクトをデータベースまたはデータ構造に保存しない限り、それらに対して何らかの「検索」を行うことはできません。

HashMap の ID に基づいて Customers を保存できる例を次に示します。

private HashMap<Integer, Customer> records = new HashMap<Integer, Customer>();

public void doSomething() {
    Customer forrest = new Customer(1); 
    Customer random = new Customer(2);

    // put the customers in the HashMap:
    records.put(1, forrest);
    records.put(2, random);

    // to get them out:
    records.get(1); // returns forrest
    records.get(2); // returns random
}
于 2012-11-09T20:29:09.943 に答える
1

何を尋ねているのかわかりません。クラスのインスタンス、作成されたオブジェクトを返すと思われます。return Forrest;次に、 Forrestオブジェクトがメソッドのメインスコープでのみ表示されるように書き込みます

于 2012-11-09T20:26:19.173 に答える
1

この場合、returnステートメントはオブジェクト型でなければなりません。

例:

return new Customer();

関連する (継承) 場合CustomerRandom除き、両方の型を返すメソッドを記述できない場合があります。

于 2012-11-09T20:24:41.927 に答える
1
static Customer GetCustomer(int id)

このメソッドの戻り値の型は、Customerクラスを返さなければならないという意味ではありません。

これは、Customer クラスのオブジェクトまたは Customer のサブクラスへの参照を返す必要があることを意味します。

したがって、return ステートメントは次のようになります。

return new Customer(id);

そして、メソッドに基づいて、それはすでに存在するCustomerオブジェクトを返す必要があるようですid。たとえば、 がある場合、そのリストから、指定されたを持つオブジェクトをList<Customer>見つける必要があります。Customerid

ここで、メイン メソッドで 2 つのCustomers-forrestとを作成したとしrandomます。これらの参照は、データベースまたはデータベースのいずれかの永続ストレージに保存する必要がありList<Customer>ます。また、いくつかに基づいてオブジェクトを指す参照idを取得するには、使用中の永続ストレージから参照を取得する必要があります。


あなたの場合、 に基づいてオブジェクトをフェッチしたいので、idを維持して、特定の でMap<Integer, Customer>保存できます。Customersid

static Map<Integer, Customer> map = new HashMap<Integer, Customer>();

public static void main(String[] args) {
    Customer forrest = new Customer("Forrest Stallings", 1, "42 New Street, New York, NY"); 
    Customer random = new Customer("Random Name", 2, "44 New Street, New York, NY"); 

    map.put(1, forrest);
    map.put(2, random);
}

そして、あなたのgetCustomerメソッドでcustomerid渡されたパラメーターの を取得するだけです:-

public Customer getCustomer(int id) {
    return map.get(id);
}

idしたがって、任意の値に対してテストを行う必要はありません。それに対応するものを自動的に取得Customeridます。

例: -

getCustomer(1);

参照によって指されたオブジェクトを返しforrestます。

于 2012-11-09T20:28:45.993 に答える
0

クラスをクラス変数として作成できると思います。

 private static Customer forest; 
 private static Customer random; 

 public static void main(String[] args) {
    forrest = new Customer("Forrest Stallings", 1, "42 New Street, New York, NY"); 
    random = new Customer("Random Name", 2, "44 New Street, New York, NY"); 
    ...
  }

それで:

 static Customer GetCustomer(int id){
    if(id == 1){
       return customer;
    }else if(id == 2){
       return random;
    }
  }
于 2012-11-09T20:32:56.020 に答える
0

GetCustomerがインスタンスメソッドの場合、次のようになります。

Customer GetCustomer(int id){
    Customer result = null;

    if(id == 1){
        result = Forrest ;
    }else if(id == 2){
        result = Random;
    }

    return result;
}

ただし、静的メソッドからインスタンス変数にアクセスすることはできません。

したがって、既存のインスタンスに依存するのではなく、メソッド内で各オブジェクトを作成することをお勧めします。

static Customer GetCustomer(int id){
        Customer result = null;

        if(id == 1){
            result = new Customer("Forrest Stallings", 1, "42 New Street, New York, NY"); 

        }else if(id == 2){
            result = new Customer("Random Name", 2, "44 New Street, New York, NY");
        }

        return result;
    }
于 2012-11-09T20:31:20.907 に答える
0

静的フィールドを使用するか、例外をスローする可能性がある場合は、クラスに静的ブロックを記述します。変数名を大文字から始めないでください。

class MainClass{
    // All uppercase because it is constant
    private static final Customer FORREST = new Customer("Forrest Stallings", 1, "42 New Street, New York, NY"); 
    private static final Customer RANDOM = new Customer("Random Name", 2, "44 New Street, New York, NY"); 

     public static void main(String[] args) {
    // TODO Auto-generated method stub

 }

復習したい場合

 Class returnClass(){
 if(sth)
    return Customer.class;
 else
    return Random.class;
 }
于 2012-11-09T20:29:05.703 に答える