【发布时间】:2017-08-11 10:00:22
【问题描述】:
我正在使用Dictionary 类来本地化我的应用程序,因为我希望我的文本是应用程序之外的文件,因此我可以更改它们而无需再次编译应用程序。
为了能够获取字符串,我创建了 StringIdentifiers 类,它具有以下所有方法:
public String minute(){
return getString("minute");
}
getString() 方法基本上只是使用Dictionary 从包含在页面中的 JSON 中获取字符串。
然后我创建了名为 Language 的子类,在其中我有更多的逻辑(检查要使用的语言等)。这一切都完美无缺,我使用Language 子类来访问字符串。甚至在 UIBinder 中。
由于现在文本越来越多,我决定将这些方法拆分为单独的类。但是由于在 Java 中我不能进行多重继承,所以我决定通过接口来实现。因此,我创建了LoginTexts、MenuTexts、EventLogTexts 等接口,而不是StringIdentifiers。在这些接口中,我指定了default 方法来获取适当的字符串。 Language 类实现了所有接口以及getString() 方法。
现在一切正常,我得到了 Language 类的实例,我可以在代码中使用接口中的方法,没有错误。
但是当涉及到 UI 活页夹时,它不会在编辑器中显示错误,但在编译时它会告诉:
[错误] 在类型中找不到名为 minute 的无参数方法 com.company.project.client.locale.Language
这是否意味着 UI 绑定器无法从接口中看到继承的默认方法?真的吗?我的意思是在Java代码中,它工作正常。
【问题讨论】:
-
这并不让我感到惊讶。我的意思是,GWT 中的 Java 1.8 支持(我的意思是完全支持)在某种程度上是一个新话题。并且考虑到 GWT 编译器依赖源代码这一事实,我认为默认方法被忽略并不奇怪(即使它在 Java 代码中工作)
-
好吧,既然它在 Java 代码中工作,我认为只有 UIbinder 存在问题,但是是的,也许我想要的太多了。我想我将不得不找到另一种方法将方法拆分为单独的文件。也许再做一个接口类,并将它们作为语言类的属性。
-
使用什么版本的GWT SDK? Release Notes中的默认方法有一些变化
-
现在我使用的是 2.8.1,之前我想使用的是 2.8.0,但我现在使用类。我认为我的想法是我只会在任何地方包含 Language 类,然后可以访问所有文本,即使它们位于不同的文件/接口中。现在我使用所有从 Language 类继承 getString() 方法的类,如果我想使用任何文本,我注入正确的文本类(MenuTexts i> 例如)。
-
“所以不知道默认方法有没有进展” ...