相关疑难解决方法(0)

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

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

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

java singleton scala scala-java-interop

38
推荐指数
3
解决办法
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 Option.orElse

与我之前的问题相同的想法,只是更高级一点。我想用 Java 编写以下 Scala 代码:

Option(System.getProperty("not.present")).orElse(Some("default")).get
Run Code Online (Sandbox Code Playgroud)

我试过这个:

    final Function0<Option<String>> elseOption = new Function0<Option<String>>() { 
        @Override public Option<String> apply() { 
            return new Some<String>("default"); 
        }
    };

    final Option<String> notPresent =
        new Some<String>(System.getProperty("not.present")).
        orElse(elseOption).get();
Run Code Online (Sandbox Code Playgroud)

但我得到:

<anonymous OptionDemo$1> is not abstract and does not override abstract method apply$mcD$sp() in scala.Function0
[error]       orElse(new Function0<Option<String>>() {
Run Code Online (Sandbox Code Playgroud)

java scala

5
推荐指数
1
解决办法
3941
查看次数

标签 统计

scala ×3

java ×2

scala-java-interop ×2

javap ×1

singleton ×1