在计算类的实例时将类作为参数

时间:2014-01-20 17:45:56

标签: java class parameters counting instances

我有一个带有方法add的类Counter,它会在创建时计算任何类的实例,但是我得到“类型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); 
    }

2 个答案:

答案 0 :(得分:1)

我同意@Rohit Jain认为它应该是Object。但是,我想建议add()方法的参数化版本:

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

参数化版本看起来更好。

答案 1 :(得分:1)

您应该将MyClass的构造函数更改为:

,而不是更改add方法。
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);
}

这个反制想法存在一个潜在的问题:当一个物体变得无法到达并被收集时,计数器不会减少。因此,您的计数器将无法告诉您当前拥有多少个对象,但总体上创建了多少对象。