如何归类?

时间:2012-11-09 20:23:22

标签: java class

我在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给出返回随机)

7 个答案:

答案 0 :(得分: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
}

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

以下是一个示例,您可以根据其在HashMap中的ID来保存客户:

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
}

答案 1 :(得分:1)

在这种情况下,您的return语句应该是类型的对象。

示例:

return new Customer();

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

答案 2 :(得分:1)

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

中可见

答案 3 :(得分:1)

static Customer GetCustomer(int id)

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

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

所以,你的return语句应该是: -

return new Customer(id);

并且,基于该方法,它似乎应该返回已存在的Customer对象id。例如,如果您有List<Customer>,那么您需要从该列表中找到具有给定Customer的{​​{1}}对象。

现在,在您的main方法中,您创建了两个id - Customersforrest。您需要将这些引用保存在某些持久性存储中,random或某个数据库。要根据某些List<Customer>获取指向对象的引用,您必须从正在使用的持久性存储中获取它。


在您的情况下,由于您要根据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); 引用指向的对象。

答案 4 :(得分: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;
 }

答案 5 :(得分: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;
    }

答案 6 :(得分: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;
    }
  }