Я хотел бы реализовать такую ситуацию: абстрактный класс с общим параметром и конкретным плагином, который реализует этот класс.Плагины и генерические файлы для плагинов
, например:
abstract class BasePlugin[T] extends Plugin {
def d: T
}
class MyPlugin(app: Application) extends BasePlugin[String] {
val d = "test"
}
Мое желание, чтобы достичь следующего:
val plugin = app.plugin[BasePlugin[String]]
//Ok, plugin = Some(MyPlugin)
val plugin = app.plugin[BasePlugin[Int]]
//KO, plugin = None
Конечно, это не произойдет, потому что MyPlugin встречается с использованием любого типа в качестве параметра (типа стирания?). В любом случае для меня было бы очень полезно найти технику для получения вышеизложенного. Есть идеи?
Scala есть нечто, называемое ClassTag, это дает возможность сохранять информацию о типе, даже если приложение компилируется. Он назывался манифест перед скалой 2.10. Может быть, вы могли бы использовать их, чтобы обойти проблему ?! –