Je suis en train de créer une instance d'un trait en utilisant cette méthodeComment créer une instance d'un trait dans une méthode générique dans scala?
val inst = new Object with MyTrait
Cela fonctionne bien, mais je voudrais passer cette création à une fonction de générateur, à savoir.
object Creator {
def create[T] : T = new Object with T
}
Je vais évidemment avoir besoin manifeste de corriger en quelque sorte les problèmes d'effacement de type, mais avant de passer à cela, je courir pour 2 questions:
Même avec un manifeste implicite , Scala exige toujours que T soit un trait. Comment puis-je ajouter une restriction pour créer [T] afin que T soit un trait?
Si j'ai choisi d'utiliser la méthode Class.newInstance pour créer dynamiquement l'instance plutôt que d'utiliser "new", comment est-ce que je spécifierais le "with" dans "new Object with T"? Est-il possible de créer dynamiquement de nouveaux types de mixin concrets lors de l'exécution?
Cela semble être une limitation intéressante du langage, mais je ne vois pas pourquoi il ne pourrait pas être résolu avec un nouveau support de mixage "Dynamique" dans Scala. Le code de trait est déjà disponible en tant que méthodes statiques, de sorte que la recherche de linéarisation peut être calculée au moment de l'exécution plutôt que cuite dans le bytecode de classe. Ensuite, vous devez juste ajouter un contrôle de type à l'exécution pour que "asInstanceOf" fonctionne. – ACyclic