2015-02-28 1 views
2

Извините за многословным названием :) Вот объект Scala:Доступ из Java-объект Scala, который наследует от общего базового класса Java

object TokenPosition extends java.lang.ThreadLocal[Int] 

А вот код Java, который использует его:

TokenPosition$.MODULE$.set(position); 

затмение дает мне следующее предупреждение:

тип безопасности: метод set(Object) принадлежит к сырому типу ThreadLocal. Ссылки на общий тип ThreadLocal<T> следует параметризовать

Что мне делать? Или это неотъемлемое ограничение для Generics и Java/Scala interop?

+0

делает более простой 'TokenPosition.set (position)' не работает? он все еще предупреждает? –

+0

@SteveWaldman Нет, Java-доступ к полям объектов Scala немного сложнее :) – fredoverflow

+0

Я думал, что последние версии Scala предлагают довольно пересылающие методы, см. «Методы пересылки» https://twitter.github.io/scala_school/java.html Вот. Но, видимо, это только с сопутствующими объектами и, вероятно, не для унаследованных членов. Вы можете попробовать добавить «класс TokenPosition;» для пересылки и специализации, «объект TokenPosition extends java.lang.ThreadLocal [Int] {def set (i: Int): Unit = super.set (i); } ' –

ответ

1

Попробуйте изменить Int к Integer, Int, как в Java int и Integer является оболочкой, поэтому она должна помочь.