Я хотел бы параметризовать тип с одним из его подклассов.Рассмотрим следующее:
class DataLoader {
class Data { /* data specifics to this data loader */ }
def getData : Data /* and so on */
}
Теперь я хочу, чтобы этот загрузчик мог асинхронно получать данные из сети.Один из вариантов заключается в том, чтобы иметь его подкласс Callable.
class DataLoader extends Callable[Data] {
class Data { /* ... */ }
def call : Data = { ... }
}
val futureData = executor.submit(new DataLoader)
futureData.get
Scala не позволит мне сделать это, потому что, когда я предоставляю параметры Callable, Data еще не известен.Если я напишу DataLoader.Data, Scala отзовет меня для циклической ссылки.
Конечно, я мог бы написать свой класс данных вне моего загрузчика, но бывают случаи, когда он лучше внутри.Конечно, другой альтернативой было бы иметь, скажем, DataManager с внутренним типом данных и загрузчиком, расширяющим Callable [Data] - что в этом случае, возможно, является лучшим дизайном.Но в стороне от этих проблем, есть ли какой-нибудь способ, которым я действительно могу реализовать черту, которая включает в себя написание функции, возвращающей T, устанавливая T как внутренний класс?