11
votes

Scala Passage des paramètres de type à l'objet

dans scala v 2.7.7

J'ai un fichier avec p> xxx pré>

ceci lance l'erreur: p>

classe quelque chose prend les paramètres de type
objet quelque chose étend autrementConstructeur [quelque chose] { p> blockquote>

Cependant, je ne peux pas faire cela P>

object Something[T] extends OtherConstructor[Something[T]]


0 commentaires

4 Réponses :


3
votes

Un objet doit avoir un type concret. L'objet Scala Continent n'expose pas une exception à cette règle.

une définition valide est xxx

t est un type de type béton .


0 commentaires

4
votes

Vous pouvez utiliser:

object StringSomething extends OtherConstructor[Something[String]]


1 commentaires

L'APT API est bien aussi: Liste GetannotationMirrors () ( java.sun.com/javase/6/docs/api/javax/lang/model/element/... ) ;-)



1
votes

Merci pour les réponses

object Something extends OtherConstructor[Something[_]]


0 commentaires

3
votes

Vous pouvez résoudre le problème général de la nécessité d'avoir besoin de objet foo [t] code> en déplaçant le paramètre type sur les méthodes de Objet FOO code>:

class Other

class OtherConstructor[O <: Other] {
  def apply(o: O): O = o  // constructor 1 in base class
}

class Something[T](value: T) extends Other

class SomethingConstructor[T] extends OtherConstructor[Something[T]] {
  def apply(o: T, s: String) = new Something[T](o)   // constructor 2 in subclass
}

object Something {
  def apply[T] = new SomethingConstructor[T] // the "constructor constructor" method
}

object demoX extends App {
  val si = new Something(123)
  val sd = new Something(1.23)

  val si1: Something[Int] = Something[Int](si)                    // OtherConstructor.apply
  val sd1: Something[Double] = Something[Double](1.23, "hello")   // SomethingConstructor[Double].apply
}


0 commentaires