特征的伴生对象在 Scala 中在 Scala 中没有可见性问题:
trait ProtocolPacket extends Serializable {
def toByteArray: Array[Byte]
}
object ProtocolPacket {
def getStreamType( streamBytes: Array[Byte] ) = {
// ...
}
}
但是在 Java 端(例如,在 jar 中获取上述内容),ProtocolPacket.getStreamType
是不可见的。事实上,(由 IDEA 反编译)源代码没有为 ProtocolPacket
getStreamType
方法
编辑:
我在 SO 上发现了关于 Companion$MODULE$
的类似点击,但被 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 - Scala:Trait Companion Object 在 Java 中不可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9436074/