Scala 中的特征的伴随对象在Scala中没有可见性问题 :
trait ProtocolPacket extends Serializable {
def toByteArray: Array[Byte]
}
object ProtocolPacket {
def getStreamType( streamBytes: Array[Byte] ) = {
// ...
}
}
然而,在Java方面(例如在jar中获取上述内容),ProtocolPacket.getStreamType
不可见。事实上,(由IDEA反编译)来源没有为getStreamType
ProtocolPacket
方法
关于Companion$MODULE$
,我在SO上发现了类似的点击,但被IDEA欺骗了:),如下所示:
以上编译并运行正常(shell和/或IDEA本身),以防其他人被困。
答案 0 :(得分:6)
查看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(/**/)
答案 1 :(得分:2)
我认为Java中的ProtocolPacket$.MODULE$.getStreamType()
但我没有仔细检查过。