9 Stimmen

Typ-Aliasing von Java-Klassen mit Statics

Angenommen, MyClass ist eine in Java definierte Klasse, die viele statische und nicht-statische Mitglieder hat. Ich habe versucht, diese Klasse (und das zugehörige Begleitobjekt) in einem Scala-Objekt zu aliasieren MyObject wie unten dargestellt:

object MyObject {
  import javastuff._
  type MyAlias = MyClass
  val MyAlias = MyClass
}

Scalac beschwert sich:

error: object MyClass is not a value
val MyAlias = MyClass

Wie kann ich das umgehen? Danke!

8voto

Kevin Wright Punkte 49145

Obwohl dies in reinem Scala für eine Klasse + Companion-Objekt funktioniert, ist es mit Javas statischen Methoden nicht möglich, da diese zu keiner Schnittstelle gehören.

Scala pourrait theoretisch ein Objekt erstellen, das Delegierte für alle statischen Methoden einer Klasse enthält, aber das tut es derzeit nicht. Es ist auch möglich, ein Compiler-Plugin für diese Aufgabe zu schreiben, wenn Sie sich mit dem Schreiben von Plugins wohl fühlen.

Andernfalls müssen Sie entweder selbst ein Objekt voller Delegierter erstellen oder nur ein paar Methoden herauspicken und sie als Funktionen weitergeben.

1voto

VonC Punkte 1117238

Mit den statischen Methoden von Java ist das nicht möglich, da diese zu keiner Schnittstelle gehören.

Update 5 Jahre später: PR 5131 Erwähnungen:

Früher haben wir die Erzeugung statischer Forwarder deaktiviert, wenn ein Objekt eine Trait als Begleiter hatte, da man in der JVM 6 einer Schnittstelle keine Methoden mit Body hinzufügen konnte. Schnittstelle in JVM 6 hinzufügen konnte.

Die JVM hat diese Einschränkung aufgehoben, um Standardmethoden in Schnittstellen zu unterstützen, also können wir die Beschränkung auch für statische Forwarder aufheben.

Behebt scala-dev Ausgabe 59

Voir Übergabe 41c9a17 por Jason Zaugg ( retronym ) .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X