将我的gwt应用程序拆分为特定的gwt代码和通用Java项目?

将我的gwt应用程序拆分为特定的gwt代码和通用Java项目?,java,gwt,Java,Gwt,我有一个gwt项目,它充当其他项目的语义引擎。 我最近意识到很少有代码是特定于gwt的。它几乎都是非常基本的java。事实上,gwt唯一特有的事情就是检索文件 所以我想做的是完全分离gwt,这样我就可以在其他Java项目中使用相同的基本代码,比如Android或处理应用程序 所以,语义核心项目可以由GWT、Android和处理应用程序继承,我不必为每个应用程序维护单独的版本 然而,要做到这一点,我需要一些其他项目的方法来为语义核心项目提供它们自己的文件处理方法 我目前的想法如何做到这一点 我想到

我有一个gwt项目,它充当其他项目的语义引擎。 我最近意识到很少有代码是特定于gwt的。它几乎都是非常基本的java。事实上,gwt唯一特有的事情就是检索文件

所以我想做的是完全分离gwt,这样我就可以在其他Java项目中使用相同的基本代码,比如Android或处理应用程序

所以,语义核心项目可以由GWT、Android和处理应用程序继承,我不必为每个应用程序维护单独的版本

然而,要做到这一点,我需要一些其他项目的方法来为语义核心项目提供它们自己的文件处理方法

我目前的想法如何做到这一点

我想到的一种方法是让SemanticCore使用如下方法为FileManager定义一个接口:

getFile(String,MyErrorHandler,MySuccessHandler)
然后在SemanticCore项目中定义MyErrorHandler和MySuccessHandler的类,实际上是以字符串作为参数的可运行程序

定义了这个接口后,其他GWT、Android等项目必须定义自己的类来实现它 例如,GWTFileHandler实现FileManager

然后创建该类的对象,并将其传递给SemanticCore

SemanticCore.setFileManager(new GWTFileHandler());
然后,语义核心可以随意使用它,以适合其平台的方式检索文件

问题,

这是一个好方法吗?在我看来,当我只使用该类中的静态方法时,我正在创建一个新对象,这似乎是错误的

替代品

我希望我的描述清楚。由于在SemanticCore项目中,所有这些都必须与GWT兼容,因此不允许使用反射


谢谢,

IMO推荐的方法是使用延迟绑定来选择与GWT兼容的FileHandler版本或其他特定于GWT的实现。提取所有版本的通用接口,并在GWT模块文件中指向正确的GWT实现

然后,您可以使用GWT.create实例化您的特定实现:

更多关于gwtproject站点的深入信息

延迟绑定是GWT编译器用于创建和删除 基于一组 参数。本质上,延迟绑定是GWT对Java的回答 反射它允许GWT开发人员生成多个变体 它们的应用程序中的大多数是针对每个浏览器环境定制的,并且只有 其中一个实际上是在浏览器中下载和执行的


谢谢,很高兴知道……尽管这似乎是一个gwt特定的解决方案。比如说,我不确定安卓/处理/其他版本如何挑选/提供他们需要的文件访问功能。我在上面加了一个gwt标签,因为这是一个限制因素,但理想情况下,我正在寻找一个通用的Javamethod来实现它。接口是解决方案,对于gwt来说,这就是如何选择正确的实现。对于其他可以使用依赖项注入的平台,请查看guice或
MyInterface implemenation = GWT.create(MyInterface.class);