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 { // ... }

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.

Author: Manuel Bernhardt, 2011-05-26

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).

 0
Author: Paolo Falabella, 2017-05-23 12:04:19