Scala:Trait Companion对象在Java中不可见

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

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

但是在Java方面(例如在jar中获取上述内容), ProtocolPacket.getStreamType不可见。 实际上,(由IDEA反编译)源没有为ProtocolPacket定义的getStreamType方法

编辑:

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

在此处输入图像描述

以上编译并运行良好(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中的ProtocolPacket$.MODULE$.getStreamType()但我没有仔细检查过。

另请参见如何从Java调用Scala单例方法? 。