2014-01-20 61 views
0

我有一個方法添加計數器,它會在創建時計算任何類的實例,但是我得到「類型Counter中的方法add(Class)不適用於參數MyClass)「我該如何解決它?我應該輸入什麼,而不是Class<?> c當計數類的實例時,作爲參數的類

public class Counter 
{ 
    static Map<String, Integer> map = new HashMap<String, Integer>(); 

    public static void add(Class<?> c) 
    { 
      String name = c.getClass().getSimpleName(); 
      int count = list.containsKey(name) ? map.get(name) : 0; 
      map.put(name, count + 1); 
    } 
} 

public class MyClass 
{ 
    public MyClass() 
    { 
     Counter.add(this); 
    } 
+1

你可以解釋一下 - >'在創建時計算任何類的實例嗎?添加也創建一個對象?例如,當MyClass a = new MyClass()時爲 –

+0

;我將使用hashmap來知道MyClass在這種情況下有一個實例 – user3210906

+1

您的列表在哪裏?順便說一句,我不會將'Map'類型的變量命名爲'list'。 –

回答

1

我同意@Rohit Jain它應該是Object。然而我想建議參數化版本的add()方法:

public static <T> add(T obj) { 
    Class<?> clazz = obj.getClass(); 
    // your implementation 
} 

參數化版本看起來更好。

+0

謝謝。我打算這樣做,但儘管如此,也許它應該以不同的方式完成。感謝您的幫助 – user3210906

1

而是改變你的add方法,你應該爲MyClass的構造函數改成這樣:

public MyClass() 
{ 
    Counter.add(this.getClass()); 
} 

這樣的話,你可以用你的HashMap<Class<?>, Integer>(或者你用做實際計數等等)像所以:

if(map.containsKey(c)) 
{ 
    map.put(c, map.get(c) + 1)); 
} 
else 
{ 
    map.put(c, 1); 
} 

這個計數器的想法有一個潛在的問題:當一個對象變得無法到達並被收集時,計數器不會減少。所以你的櫃檯將無法告訴你有多少物品目前有,但你創造了多少個整體。

+0

我還沒有在此之前減少。感謝您的幫助 – user3210906