对于性状A同伴对象Scala中无法看到问题在斯卡拉:
trait ProtocolPacket extends Serializable {
def toByteArray: Array[Byte]
}
object ProtocolPacket {
def getStreamType( streamBytes: Array[Byte] ) = {
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
但是在Java方面(例如在jar中获取上述内容),a ProtocolPacket.getStreamType是不可见的.实际上,(由IDEA反编译)源没有getStreamType为a定义的方法ProtocolPacket
我在SO上发现了类似的点击Companion$MODULE$,但被IDEA欺骗了:)如下所示:

以上编译并运行良好(shell和/或IDEA本身),以防其他人被困.
查看javap输出,您会发现:
$ javap ProtocolPacket
public interface ProtocolPacket extends scala.Serializable{
public abstract byte[] toByteArray();
}
Run Code Online (Sandbox Code Playgroud)
和伴侣对象:
$ 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();
}
Run Code Online (Sandbox Code Playgroud)
这让我相信你可以写的Java:
ProtocolPacket$.MODULE$.getStreamType(/**/)
Run Code Online (Sandbox Code Playgroud)