我有一个包含两个构造函数的类:
@JsType
public class Dog implements Animal {
String name;
public Dog() {
this.name = "Scooby Doo";
}
public Dog(String name) {
this.name = name;
}
}
运行gwt compile [使用GWT-dev 2.8]
时出现以下错误[ERROR] Constructor 'Dog(String)' can be a JsConstructor only if all constructors in the class are delegating to it.
我一直试图解决这个错误,并没有取得多大成功。我不知道如何委托给其他构造函数。
非常感谢任何帮助!
谢谢!
答案 0 :(得分:2)
唉,JavaScript无法处理多个构造函数!你得到一个而且只有一个。
你可以做一些假装有多个东西 - 你可以检查传入的数据,并指定合理的默认值:
@JsConstructor
public Dog(@JsOptional String name) {
if (name == null) {
name = "Scooby Doo";
}
this.name = name;
}
如果你的两个构造函数在同一个位置不使用相同的类型,你必须要小心这里的类型 - 明智地使用instanceof
可能会起作用(只要知道对于JS对象你正在使用JS {{ 1}},而不是java!)。另一个选项让您更灵活,但同样没有重载方法 - 工厂方法:
instanceof
同一主题的另一个想法是创建一个JsType构建器。这对JS来说有点不那么惯用了。
最后,您可以考虑可怕的“选项对象”,其中您的一个构造函数接受带有属性的单个Object,或者保存所有可能值的public static Dog withName(String name) {
return new Dog(name);
}
public static Doc defaultImpl() {
return new Dog();
}
@JsIgnore
public Dog() {/*...*/}
@JsIgnore
public Dog(String name) {/*...*/}
,然后检查巨型构造函数中的nullness和类型。我个人避免这个 - 这是我希望通过首先编写Java来避免的可怕事情之一。