开发者

Scala getting the class of a parameter

开发者 https://www.devze.com 2023-03-01 15:10 出处:网络
So in Java I had a class that contained a HashMap that used the class as a key pointing to an object of the same class.

So in Java I had a class that contained a HashMap that used the class as a key pointing to an object of the same class.

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);
  }
}

However when I try to do the same thing in Scala within a trait I find 开发者_开发问答myself getting a type mismatch error that a java.lang.Class[?0] was found where Class[Component] was needed.

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

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

This has me absolutely stumped any help would be appreciated greatly.


The reason your code doesn't compile is that T.getClass method has result Class[_] and not Class[T]. Details of getClass has been explained by VonC here.

From your source code I cannot see if you care about type parameter of Class instances but following version of your code compiles:

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

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

精彩评论

暂无评论...
验证码 换一张
取 消