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单例方法? 。