Это оригинальный метод, передавая в DatabaseType.Как совместить общий тип scala с признаком
trait DatabaseComponent
class Database {
this: DatabaseComponent =>
}
object Database {
def apply(dbType : DatabaseType): Unit ={
val database = dbType match {
case DatabaseType.H2 => new Database with H2Component {}
case DatabaseType.MySQL => new Database with MySQLComponent {}
case DatabaseType.PostgresSQL => new Database with PostgresSQLComponent {}
}
}
}
Я хочу, однако, проходят в родовом типа и использование typeOf(T)
как в C#
private void Apply<T>(){
switch(typeOf(T)){
Something
}
}
Я смотрю на этот пост How to match scala generic type?
Но я до сих пор не уверен, что это делается.
1) Что с неявным для этого val string = implicitly[ClassTag[String]]
2) Почему T
должен быть подкласс ClassTag
здесь implicitly[ClassTag[T]] match {
3) Должен ли я использовать ClassTag или TypeTag здесь?
Я не слышал, что описано, как проблема расширения - Вы имели в виду [проблема выражение] (https://en.wikipedia.org/wiki/Expression_problem)? – AlexFoxGill
Да, вы правы. Однако это также связано с расширением (тщательно проверьте цитированные источники в связанной статье wiki). На самом деле проблема расширения может быть лучше. Поэтому я прав. – uberwach