Делает любого там, кто знаком с Scala, знают, как я мог использовать scala.collection.immutable. Набор от Java? Я могу неопределенно считать scaladoc, но не уверен, как назвать scala методы как "-" от Java (я предполагаю, что просто должен включать некоторый scala .jar файл в моем пути к классу...?)
Scala записывает эти специальные символы как $ plus, $ minus и т. Д. Вы можете убедиться в этом, запустив javap для scala.collection.immutable.HashSet.
Это позволяет вам делать такой код:
Set s = new HashSet<String>();
s.$plus("one");
Неприятно, и на самом деле он не работает во время выполнения! Вы получаете NoSuchMethodError. Я предполагаю, что это связано с этим обсуждением . Используя обходной путь, который они обсуждают, вы можете заставить все работать:
import scala.collection.generic.Addable;
import scala.collection.generic.Subtractable;
import scala.collection.immutable.HashSet;
import scala.collection.immutable.Set;
public class Test {
public static void main(String[] args) {
Set s = new HashSet<String>();
s = (Set<String>) ((Addable) s).$plus("GAH!");
s = (Set<String>) ((Addable) s).$plus("YIKES!");
s = (Set<String>) ((Subtractable) s).$minus("GAH!");
System.out.println(s); // prints Set(YIKES!)
}
}
Разве это не красота!?
Я считаю, что Java 7 позволит экранировать напуганные имена методов, так что, возможно, к тому времени вы сможете to do
s = s.#"-"('GAH!')
Чтобы попробовать это, вам понадобится scala-library.jar из папки lib / дистрибутива Scala.
Обновление : исправлен синтаксис Java 7, спасибо Мирко.
На основании ответа Адама у меня со Scala 2.7.7 под Eclipse отлично работает следующее:
package com.example.test.scala;
import scala.collection.immutable.HashSet;
import scala.collection.immutable.Set;
public class ImmutableSetTest1 {
public static void main(String[] args) {
Set s0 = new HashSet<String>();
Set[] s = new Set[3];
s[0] = s0.$plus("GAH!");
s[1] = s[0].$plus("YIKES!");
s[2] = s[1].$minus("GAH!");
for (int i = 0; i < 3; ++i)
System.out.println("s["+i+"]="+s[i]);
}
}
, который печатает:
s[0]=Set(GAH!)
s[1]=Set(GAH!, YIKES!)
s[2]=Set(YIKES!)