Xtend:为什么编译器生成的公共Java构造函数不能从Xtend代码中看到?

时间:2015-01-22 18:13:00

标签: java eclipse xtext xtend

我有一个Xtend子类PubnubMessage,它继承了一个字段并具有通过活动注释生成的构造函数。我可以在生成的Java代码中看到公共构造函数,并且它正确接受该字段的一个参数,但是当我尝试从另一个Xtend类中调用该构造函数时,如下所示:

override successCallback(String channel, Object message)
{
    send(new PubnubMessage(message))
}

我在构造函数调用中遇到此错误:

Invalid number of arguments. The constructor PubnubMessage() is not applicable for the arguments (Object)

只有默认的no-arg构造函数是可见的,但是由于生成了一个显式构造函数,所以它甚至不应该是默认构造函数。如果我使用相同的调用创建一个Java类:

new PubnubMessage(message);

没有错误。以下是相关代码:

SocketMessage.xtend

@JsonData class SocketMessage
{
    Object message
}

SocketMessage.java(生成Xtend)

@JsonData
@SuppressWarnings("all")
public class SocketMessage {
  private final Object message;

@JsonCreator
public SocketMessage(@JsonProperty final Object message) {
  super();
  this.message = message;
}

PubnubMessage.xtend

@JsonData class PubnubMessage extends SocketMessage {}

PubnubMessage.java(生成Xtend)

@JsonData
@SuppressWarnings("all")
public class PubnubMessage extends SocketMessage {
  @JsonCreator  
  public PubnubMessage(@JsonProperty final Object message) {
    super(message);
}

我遗漏了生成的hashCode(),equals()和toString()。关于这个Java代码的一切对我来说似乎都很好,就像我说的,我可以从其他Java类成功调用它,但不能从Xtend成功调用它。

0 个答案:

没有答案