java - Scala:Trait Companion Object 在 Java 中不可见

标签 java scala

特征的伴生对象在 Scala 中在 Scala 中没有可见性问题:

trait ProtocolPacket extends Serializable {    
  def toByteArray: Array[Byte]
}

object ProtocolPacket {
  def getStreamType( streamBytes: Array[Byte] ) = {
    // ...
  }
}

但是在 Java 端(例如,在 jar 中获取上述内容),ProtocolPacket.getStreamType 是不可见的。事实上,(由 IDEA 反编译)源代码没有为 ProtocolPacket

定义的 getStreamType 方法

编辑:

我在 SO 上发现了关于 Companion$MODULE$ 的类似点击,但被 IDEA 欺骗了 :) 如下所示:

enter image description here

以上编译和运行良好(shell 和/或 IDEA 本身),以防其他人被困。

最佳答案

查看 javap 输出你会发现:

$ javap ProtocolPacket
public interface ProtocolPacket extends scala.Serializable{
    public abstract byte[] toByteArray();
}

和伴生对象:

$ javap ProtocolPacket$
public final class ProtocolPacket$ extends java.lang.Object implements scala.ScalaObject,scala.Serializable{
    public static final ProtocolPacket$ MODULE$;
    public static {};
    public void getStreamType(byte[]);
    public java.lang.Object readResolve();
}

这让我相信您可以编写 Java:

ProtocolPacket$.MODULE$.getStreamType(/**/)

关于java - Scala:Trait Companion Object 在 Java 中不可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9436074/

相关文章:

Scala 为什么List类要定义一个toList方法?

scala - 如何从 Spark 中的分区 parquet 文件读取特定日期范围

java - 多个 Camel 路由会导致线程数量非常多吗?

Java 引用问题

java - 使用 JS/jQuery/AJAX 和 Controller 在 Java 中分页

java - XPath 读取根元素返回 null

java - 函数运行时无法启动 - 无法加载类型 'Microsoft.Azure.ServiceBus.Management.ManagementClient'

Scala - 删除空格

Scala:我可以将组合器解析器微调为本地贪婪吗?

scala - Actor 之间的 Akka 断路器共享