2014-09-20 93 views
-2

我不會將我的整個代碼粘貼到這裏以解決我的問題。爲了保持簡單的生病,只需在這裏爲我的問題編寫一些代碼即可。如何從創建的類中訪問特定對象從

好吧,我有一個名爲「exampleClass」的類,它有一個名爲「number」的整數變量,例如「number」有一個get和set方法。我的問題是:如果我有多個「exampleClass」對象,我如何從多個對象中獲取特定對象,以便從「exampleClass」內部訪問特定對象。

「ExampleClass中」下面

public class exampleClass{ 

    public int number; 

    public int getNumber() { 
     return number; 
    } 

    public void setNumber(int number) { 
     this.number = number; 
    } 
} 
+1

'如果我在不同的類中有多個「exampleClass」對象,我如何從「exampleClass」內的多個對象中獲取特定的對象,這樣我就可以從「exampleClass」中訪問特定的對象。因爲它沒有意義:) – nem035 2014-09-20 17:41:45

+0

你的問題有點含糊,但你可能想使用['HashMap '](http://docs.oracle.com/javase/7/docs/api /java/util/HashMap.html),假設每個對象都有不同的數字,並且你知道這些數字是什麼。 – 2014-09-20 17:56:01

回答

1

假設號碼是什麼使你的類的任何實例「獨一無二」爲比較的目的,你應該考慮重寫equals和hashCode方法。

這樣,您就可以使用indexOf(Object o)在集合中找到類中的實例,例如ArrayList。

例如:

public class ExampleClass 
{ 
    private int number; 

    public ExampleClass(int number) 
    { 
     this.number = number; 
    } 

    public int getNumber() 
    { 
     return number; 
    } 

    public void setNumber(int number) 
    { 
     this.number = number; 
    } 

    @Override 
    public boolean equals(Object other) 
    { 
     boolean isEqual = false; 

     if (other instanceof ExampleClass) 
     { 
      ExampleClass otherEC = (ExampleClass)other; 

      isEqual = number == otherEC.number; 
     } 

     return isEqual; 
    } 

    @Override 
    public int hashCode() 
    { 
     return number; 
    } 
} 

public static void main(String[] args) 
{ 
    List<ExampleClass> list = new ArrayList<ExampleClass>(); 

    ExampleClass ec1 = new ExampleClass(1); 

    list.add(ec1); 
    list.add(new ExampleClass(3)); 
    list.add(new ExampleClass(102)); 

    System.out.println(list.indexOf(new ExampleClass(3))); 
    System.out.println(list.indexOf(new ExampleClass(1))); 
    System.out.println(list.indexOf(ec1)); 
    System.out.println(list.indexOf(new ExampleClass(5))); 

} 

將產生以下的輸出:

1 
0 
0 
-1 

請看看這裏的,爲什麼你應該重寫equals和hashCode瞭解更多信息要存儲在收藏中的對象:

Why do I need to override the equals and hashCode methods in Java?

0

這是你想達到的目的嗎?

import java.util.HashMap; 

public class Test { 
    public static void main(String[] args) { 
     new ExampleClass(123); 
     new ExampleClass(456); 

     ExampleClass obj1 = ExampleClass.getInstance(123); 
     ExampleClass obj2 = ExampleClass.getInstance(456); 
     ExampleClass obj3 = ExampleClass.getInstance(789); 

     System.out.println(obj1); //Output: ExampleClass-object with ID 123 
     System.out.println(obj2); //Output: ExampleClass-object with ID 456 
     System.out.println(obj3); //Output: null 
    } 
} 
class ExampleClass { 
    private static final HashMap<Integer, ExampleClass> instances 
      = new HashMap<Integer, ExampleClass>(); 

    private final int id; 

    public ExampleClass(int id) { 
     if(instances.get(id) != null) 
      throw new IllegalArgumentException("An instance with ID " + id 
        + " already exists."); 
     this.id = id; 
     instances.put(id, this); 
    } 
    public int getID() { 
     return id; 
    } 
    public static ExampleClass getInstance(int id) { 
     return instances.get(id); 
    } 
    @Override 
    public String toString() { 
     return this.getClass().getSimpleName() + "-object with ID " + id; 
    } 
} 

請注意,在上面的例子中,做兩個ExampleClass -objects用相同的ID會拋出異常。

0

您需要將唯一標識符關聯到您創建的每個對象。在不改變類結構的情況下,最接近的就是使用散列碼。在這種情況下,對象的唯一性並不能保證。 因此,下一個選項是更改類的結構(這是個壞主意)並向類中添加UUID。在創建對象時(構造函數)初始化UUID。爲了跟蹤對象,你可以使用HashMap。

相關問題