Scala: Trait Companion Object не отображается в Java - PullRequest
7 голосов
/ 24 февраля 2012

Сопутствующий объект для черты в Scala не имеет проблем с видимостью в Scala :

trait ProtocolPacket extends Serializable {    
  def toByteArray: Array[Byte]
}

object ProtocolPacket {
  def getStreamType( streamBytes: Array[Byte] ) = {
    // ...
  }
}

Однако на стороне Java (например, получает выше в банке), ProtocolPacket.getStreamType не виден. На самом деле источник (декомпилированный IDEA) не имеет метода getStreamType, определенного для ProtocolPacket

EDIT:

Я обнаружил похожие хиты на SO в отношении Companion$MODULE$, но IDEA обманула :), как показано ниже:

enter image description here

Вышеуказанное компилируется и работает нормально (оболочка и / или сама IDEA), на случай, если кто-то еще попадет в ловушку.

Ответы [ 2 ]

6 голосов
/ 24 февраля 2012

Глядя на 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(/**/)
2 голосов
/ 24 февраля 2012

Я думаю, что это ProtocolPacket$.MODULE$.getStreamType() в Java, но я не проверил дважды.

См. Также Как вы вызываете одноэлементный метод Scala из Java? .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...