Scala获取参数的类

时间:2011-04-30 22:21:14

标签: scala

所以在Java中我有一个包含HashMap的类,它使用该类作为指向同一类对象的键。

class ComponentContainer {
  private HashMap<Class<? extends Component>, Component> componentMap

  public ComponentContainer {
    componentMap = new HashMap<Class<? extends Component>, Component>();
  }

  public void set (Component c) {
    componentMap.put(c.getClass(), c);
  }
}

然而,当我尝试在特征中在Scala中做同样的事情时,我发现自己得到了一个类型不匹配的错误,发现java.lang.Class [?0]需要Class [Component]。

trait ComponentContainer {
  val componentMap: HashMap[Class[Component], Component] = HashMap.empty

  def set (c: Component) {
    val t = (c.getClass, c)
    componentMap += t
  }    
}

这让我非常难过,任何帮助都会受到很大的赏识。

1 个答案:

答案 0 :(得分:1)

您的代码无法编译的原因是T.getClass方法的结果为Class[_]而非Class[T]。 VonC here解释了getClass的详细信息。

从您的源代码中我无法看到您是否关心类实例的类型参数,但是您的代码编译版本如下:

trait ComponentContainer {
  val componentMap: HashMap[Class[_], Component] = HashMap.empty

  def set (c: Component) {
    val t = (c.getClass, c)
    componentMap += t
  }
}