Versuch, eine in Scala erstellte Klasse in Java zu initialisieren

7

Ich versuche Scala zu lernen, also habe ich beschlossen, Datenstrukturen damit zu implementieren. Ich habe mit dem Stack begonnen. Ich habe die folgende Stapelklasse erstellt.

%Vor%

I Versuchen Sie dann, diese Klasse in meiner Java-Klasse mit dem folgenden

zu initialisieren %Vor%

Allerdings wurde mir gesagt, dass der Konstruktor nicht existiert und dass ich ein Argument hinzufügen sollte, das zu Manifest passt. Warum passiert das und wie kann ich das beheben?

    
Aidanc 25.03.2012, 14:01
quelle

3 Antworten

18

Alexey gab Ihnen die richtige Erklärung, aber es ist definitiv möglich, Manifest in Ihrem Code zu erstellen (Sie brauchen nur ein java.lang.Class -Objekt, das Sie einfach in Java erstellen können).

Zuerst sollten Sie eine Java-freundliche Factory-Methode zum Companion-Objekt von Stack hinzufügen:

%Vor%

Diese Methode generiert das entsprechende Manifest (aus einer Java-Klasse) und übergibt es explizit an den Konstruktor Stack . Sie können es dann ohne Probleme aus Java verwenden:

%Vor%     
paradigmatic 25.03.2012, 16:40
quelle
9

Dies passiert, weil ein Kontext, der wie [A : Manifest] gebunden ist, nur eine Kurzform für ein implizites Konstruktorargument ist. Ihre Klasse wird also "wirklich" als class Stack[A]()(implicit m: Manifest[A]) { deklariert. Da die einzige Möglichkeit, ein Manifest zu erstellen, Compiler-Magie ist (so weit ich weiß), kann man das nicht von Java aus tun und kann dort kein Stack konstruieren.

Sie können den Entwurf entweder ändern, um Manifeste zu vermeiden, oder Instanzen von Stack im Scala-Code erstellen und diese nur aus Java verwenden.

    
Alexey Romanov 25.03.2012 14:15
quelle
2

Folgen Sie paradigmatischer Antwort, Sie können auch einen Konstruktor für Ihre Klasse erstellen:

%Vor%

das kann dann aus Java aufgerufen werden:

%Vor%

Trotzdem wird das Problem mit generischen Typen wie Stacks von Strings auftreten. Dazu geben Sie in diesen Thread aussehen: Ссылка

    
fikovnik 14.08.2012 10:50
quelle

Tags und Links