【问题标题】:Class as a parametr when counting instances of classes计算类实例时将类作为参数
【发布时间】:2014-01-20 17:45:56
【问题描述】:

我有一个带有方法 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); 
    }

【问题讨论】:

  • 你能解释一下吗-> count instances of any classes when creating? Add 也会创建一个对象?
  • 例如当 MyClass a = new MyClass();我将使用 hashmap 知道 MyClass 在这种情况下有一个实例
  • 您的清单在哪里?顺便说一句,我不会将Map 类型的变量命名为list

标签: java class parameters counting instances


【解决方案1】:

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

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

参数化版本看起来更好。

【讨论】:

  • 谢谢。我本来打算这样做,但尽管如此,也许应该以不同的方式进行。感谢您的帮助
【解决方案2】:

您应该更改 MyClass 的构造函数,而不是更改您的 add 方法:

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

这样,您可以像这样使用您的HashMap&lt;Class&lt;?&gt;, Integer&gt;(或您用来进行实际计数的任何东西):

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

这个计数器的想法有一个潜在的问题:当一个对象变得不可访问并被收集时,计数器不会减少。因此,您的计数器将无法告诉您当前拥有多少对象,而是您总共创建了多少。

【讨论】:

  • 在此之前我还没有考虑过减少。感谢您的帮助
猜你喜欢
  • 2013-07-12
  • 2019-09-28
  • 2013-12-17
  • 2013-06-23
  • 2019-09-29
  • 2011-08-04
  • 2015-02-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多