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 给定返回 forrest,2 给定返回随机)

4

7 回答 7

3

当您在 main 中创建 Customer 对象时,它们仅存在于 main 中,除非您将它们保存在某处。

例如:

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

除非您将新对象保存到数据库或数据结构中,否则您将无法对它们进行某种“查找”。

这是一个示例,您可以根据客户的 id 在 HashMap 中保存客户:

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语句应该是类型的对象。

例子:

return new Customer();

除非CustomerRandom相关(继承),否则您可能无法编写返回两种类型的方法。

于 2012-11-09T20:24:41.927 回答
1

我不确定你在问什么。我怀疑你要返回类的实例,创建对象。然后写return Forrest;Forrest 对象仅在方法主范围内可见

于 2012-11-09T20:26:19.173 回答
1
static Customer GetCustomer(int id)

此方法的返回类型并不意味着您必须返回Customer该类。

这意味着,它应该返回对 Customer 类或 Customer 子类的对象的引用。

因此,您的退货声明应如下所示:-

return new Customer(id);

而且,根据该方法,它似乎应该返回一个已经存在的Customer对象id。例如,如果您有List<Customer>,那么您需要从该列表中找出Customer具有给定 的对象id

现在,鉴于在您的 main 方法中,您已经创建了两个Customers-forrestrandom. 您需要将这些引用保存在一些持久性存储中,无论是一个List<Customer>数据库还是某个数据库。要获得指向基于 some 的对象的引用id,您必须从正在使用的持久性存储中获取它。


在您的情况下,由于您想基于 获取对象id,您可以维护一个Map<Integer, Customer>以存储您Customers的特定id.

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方法中,只需获取customer作为id参数传递的参数:-

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

因此,您无需id对任何值进行测试。它会自动获取对应Customer的那个id

例如: -

getCustomer(1);

将返回引用指向的对象forrest

于 2012-11-09T20:28:45.993 回答
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 回答
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

我认为您可以将类作为类变量:

 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 回答