définition de type dans un objet package "détournement" de l'héritage d'une classe java dans le code scala
, j'ai la situation suivante:
J'ai une hiérarchie de classes Java comme celle-ci:
package org.foo.some;
public class Model extends org.foo.some.GenericModel { // ... }
package org.bar;
public class MyModel extends org.foo.some.Model { // ... }
Où org.foo.some.Model
et org.foo.some.GenericModel
sont hors de ma portée (pas mon code). Dans Scala, aussi hors de ma portée, il y a:
package org {
package foo {
package object some {
type Model = org.foo.some.ScalaModel
}
}
}
Cela conduit à un comportement amusant dans le code Scala, par exemple
val javaModel:MyModel = new org.bar.MyModel()
trait FooTrait[T <: org.foo.some.GenericModel] { // ... }
class FooClass extends FooTrait[MyModel] { //... }
Ne compile pas et déclenche l'erreur suivante:
Arguments de type [org.bar.MyModel] ne sont pas conformes au type de trait Foottrait limites de paramètre [T <:>
De plus, je ne peux invoquer aucune méthode de org.foo.some.Model
ni de org.foo.some.GenericModel
sur javaModel
:
javaModel.doSomething()
Soulève
Créer de la Valeur n'est pas membre de l'organisation.bar.Mymodèle
J'ai l'impression que l'objet package "détourne" la visibilité de la hiérarchie des classes Java dans le code Scala. En effet, ScalaModel
ne s'étend pas org.foo.some.GenericModel
.
Existe-t-il un moyen d'accéder toujours à la hiérarchie depuis Scala code?
Edit: lors de la re-compilation du code hors de ma portée et de la suppression de la re-définition de type, tout fonctionne. Je pense donc que ce que je regarde est un moyen de "désactiver" une définition de type au niveau du package pour une classe spécifique.
1 answers
Utilisez-vous une interface graphique (en particulier Eclipse) pour construire votre projet?
Cela semble lié à Difficulté de Scala à accéder aux méthodes Java (qui n'a pas de réponse mais où le consensus général est que le problème n'est pas avec scala mais avec Eclipse).