Frage

Bei der Bearbeitung von Scala-Objekten (hauptsächlich aus dem scala.collection-Paket) scheinen die über den Operator überladenen Funktionen in Java verfügbar zu sein.

d.h.in Scala

var s = Set(1, 2, 3)
var t = s + 4
var x = s | t

also in Java, schauen scala.collection.Set In der automatischen Vervollständigung von Eclipse kann ich die Prototypen sehen

eclipse screenshot

Aber ich kann sie nicht richtig verwenden

import scala.collection.Set;

Set<Integer> s = new Set<Integer>();
Set<Integer> t = s.$plus(4); /* compile error with javac, or runtime error with eclipse/*

Wie sollen diese Scala-Methoden in Java verwendet werden?

War es hilfreich?

Lösung

Es scheint, dass man in Java für einige Scala-Schnittstellen nicht programmieren kann!
Dieser Code wird in Sun und Eclipse korrekt kompiliert und ausgeführt.

Beachten Sie die Verwendung von HashSet auf der linken Seite der Aufgabe

import scala.collection.HashSet;

public class TestCase1 {

    public static void main(String[] args) {
        HashSet<String> set2 = new HashSet<String>();

        HashSet<String> set4 = set2.$plus("test");

        System.out.println(set2.size());
        System.out.println(set4.size());


    }
}

Warum ist das so?

Ich glaube, es hat etwas mit Scalas Fähigkeit zu tun, mehrere Merkmale zu erben, was Java Eclipse nicht versteht.

HashSet erweitert sich beispielsweise AbstractSet, Set, GenericSetTemplate,SetLike, FlatHashTable, CustomParallelizable, Serializable Einige davon sind Schnittstellen, einige davon sind AbstractClasses.

Der .$plus() Methode scheint von zu kommen SetLike, nicht Set, was erklären würde, warum die Methode auf aufgerufen wird Set Supertype würde diesen Fehler verursachen.

Trotzdem kann ich mich immer noch nicht darauf beziehen HashSet mit dem Supertyp SetLike da das immer noch fehlschlägt, und das ist alles, was ich tun kann.

Ich denke, das Hauptproblem hier besteht darin, dass Elipse den Supertyp irgendwie falsch darstellt, als ob er diese Methoden hätte, was falsch ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top