Scala получает класс параметра - PullRequest
2 голосов
/ 01 мая 2011

Итак, в 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 Ответ

1 голос
/ 01 мая 2011

Причина, по которой ваш код не компилируется, состоит в том, что метод T.getClass имеет результат Class[_], а не Class[T].Подробная информация о getClass была объяснена VonC здесь .

Из вашего исходного кода я не могу видеть, волнует ли вас параметр типа экземпляров Class, но компилируется следующая версия вашего кода:

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

  def set (c: Component) {
    val t = (c.getClass, c)
    componentMap += t
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...