我有一个带有方法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);
}
答案 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);
}
这个反制想法存在一个潜在的问题:当一个物体变得无法到达并被收集时,计数器不会减少。因此,您的计数器将无法告诉您当前拥有多少个对象,但总体上创建了多少对象。