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

tol*_*ius 7 java scala

对于性状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本身),以防其他人被困.

Tom*_*icz 6

查看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)