标签: scala-java-interop

如何在Java代码中使用scala.None

可能重复:
从Java访问scala.None

在Java中,您可以创建Some使用构造函数的实例,即new Some(value),但None没有合作伙伴类.你如何None从Java 传递给Scala函数?

java singleton scala scala-java-interop

38
推荐指数
3
解决办法
1万
查看次数

使用带有Scala保留字的Java库

我正在使用用Java编写的外部库(Selenium).其中一个函数调用具有签名type(String, String),当我尝试从Scala调用它时,我一直遇到编译器错误,即:

selenium.type("ab","abc")
Run Code Online (Sandbox Code Playgroud)

这个问题有解决方法吗?

java selenium scala scala-java-interop

37
推荐指数
1
解决办法
1959
查看次数

如何使用scala.Float将Scala Map转换为Java Map到java.Float k/v转换

我希望能够执行以下操作,但是在调用useMap时失败了.我该如何进行此转换?

scala> import scala.collection.JavaConversions._
import scala.collection.JavaConversions._

scala> import scala.collection.JavaConverters._
import scala.collection.JavaConverters._

scala> def useMap(m: java.util.Map[java.lang.Integer, java.lang.Float]) = m
useMap: (m: java.util.Map[Integer,Float])java.util.Map[Integer,Float]

scala> val v: Map[Int, Float] = Map()
v: Map[Int,Float] = Map()

scala> useMap(v)
<console>:10: error: type mismatch;
 found   : scala.collection.immutable.Map[Int,scala.Float]
 required: java.util.Map[Integer,java.lang.Float]
              useMap(v)
                     ^
Run Code Online (Sandbox Code Playgroud)

它似乎适用于Map [String,String],但不适用于Map [Int,Float].

collections scala type-conversion implicit-conversion scala-java-interop

36
推荐指数
3
解决办法
4万
查看次数

Scala将List [Int]转换为java.util.List [java.lang.Integer]

在Scala中有一种很好的方法可以在List [Int]和java.util.List [java.lang.Integer]之间进行转换吗?

我正在与Java(Thrift)接口.

JavaConversions支持List - > java.util.List,并且Int - > java.lang.Integer之间存在implicits,但是我可以告诉我仍然需要额外的传递来手动进行转换.

val y = List(1)     
val z: java.util.List[Integer] = asList(y)  map { (x: Int) => x : java.lang.Integer }
Run Code Online (Sandbox Code Playgroud)

scala scala-java-interop

35
推荐指数
2
解决办法
1万
查看次数

如何在Java中使用Scala单例对象?

我有一个Scala对象,我需要在Java类中使用.

这是Scala对象

object Person {
  val MALE = "m"
  val FEMALE = "f"
}
Run Code Online (Sandbox Code Playgroud)

如何在Java中使用此Scala对象?

到目前为止我没有成功尝试过以下内容(编译错误):

  • Person.MALE() //返回一个无用的String,因为我想要实际的Person对象

java scala scala-java-interop

34
推荐指数
1
解决办法
1万
查看次数

Java < - > Scala interop:透明的List和Map转换

我正在学习Scala,我有一个Java项目要迁移到Scala.我想通过逐个重写类并检查新类没有破坏项目来迁移它.

这个Java项目使用了很多java.util.Listjava.util.Map.在新的Scala类中,我想使用Scala ListMap拥有漂亮的Scala代码.

问题是新的类(那些在Scala中是wtitten)没有与现有的Java代码无缝集成:Java需要java.util.List,Scala需要它自己的代码scala.List.

以下是该问题的简化示例.有Main,Logic,Dao类.他们互相称呼:Main - > Logic - > Dao.

public class Main {
    public void a() {
        List<Integer> res = new Logic().calculate(Arrays.asList(1, 2, 3, 4, 5));
    }
}

public class Logic {
    public List<Integer> calculate(List<Integer> ints) {
        List<Integer> together = new Dao().getSomeInts();
        together.addAll(ints);
        return together;
    }
}

public class Dao {
    public List<Integer> getSomeInts() {
        return Arrays.asList(1, 2, 3); …
Run Code Online (Sandbox Code Playgroud)

java interop scala scala-java-interop

33
推荐指数
1
解决办法
1万
查看次数

如何学习使用javap从Java中使用scala.None?

在上一个问题中,从Java访问scala.None,似乎人们已经习惯javap了解如何scala.None从Java 访问.我想知道他们是怎么做到的.仅供参考,答案是:

scala.Option$.MODULE$.apply(null);
Run Code Online (Sandbox Code Playgroud)

可以缩短为:

scala.Option.apply(null);
Run Code Online (Sandbox Code Playgroud)

鉴于此计划(OptionTest.scala):

object OptionTest extends App {
  val x = scala.None
  val y = scala.Some("asdf")
}
Run Code Online (Sandbox Code Playgroud)

我这样跑javap了:

javap -s -c -l -private OptionTest
Run Code Online (Sandbox Code Playgroud)

这是javap输出的一部分:

public static final scala.None$ x();
  Signature: ()Lscala/None$;
  Code:
   0:   getstatic  #11; //Field OptionTest$.MODULE$:LOptionTest$;
   3:   invokevirtual  #55; //Method OptionTest$.x:()Lscala/None$;
   6:   areturn
Run Code Online (Sandbox Code Playgroud)

我也javap的上运行scala.Nonescala.Option.如何从javap输出中找出:

  1. None是唯一None.type延伸的类型的对象Option
  2. apply()伴侣对象的方法是必需的

scala javap scala-java-interop

33
推荐指数
2
解决办法
4437
查看次数

在Java代码中从scala.collection.Seq <String>转换为java.util.List <String>

我从Java调用Scala方法.我需要进行从Seq到List的转换.

我无法修改Scala方法的签名,所以我无法使用该asJavaCollection方法scala.collection.JavaConversions._

有关如何实现这一目标的任何想法?

使用Scala 2.9.3

java scala type-conversion scala-java-interop

29
推荐指数
3
解决办法
2万
查看次数

将Java迁移到Scala

在将现有Java代码库逐步迁移到Scala时,需要注意哪些最重要的要点和解决方法?具有(可能非常长)的中间阶段,其中两种语言都在使用中.

我正在考虑的事情是:

  • 不同的集合层次结构
  • Scala无法很好地处理的Java构造
  • Scala构造在Java中使用是不切实际的
  • 构建工具
  • 编译顺序
  • 框架中的不变性支持
  • 等等

java migration scala scala-java-interop

28
推荐指数
3
解决办法
3454
查看次数

将Scala Set转换为Java(java.util.Set)?

我在Scala中有一个Set(我可以选择任何实现,因为我正在创建Set.我正在使用的Java库需要一个java.util.Set [String].

以下是在Scala中执行此操作的正确方法(使用scala.collection.jcl.HashSet#underlyinges):

import com.javalibrary.Animals

var classes = new scala.collection.jcl.HashSet[String]
classes += "Amphibian"
classes += "Reptile"
Animals.find(classes.underlying)
Run Code Online (Sandbox Code Playgroud)

它似乎工作正常,但由于我是Scala的新手,我想知道这是否是首选方式(我尝试的任何其他方式都会出现类型不匹配错误):

error: type mismatch;
 found   : scala.collection.jcl.HashSet[String]
 required: java.util.Set[_]
Run Code Online (Sandbox Code Playgroud)

scala type-conversion scala-2.8 scala-java-interop scala-collections

27
推荐指数
4
解决办法
1万
查看次数