0

我正在构建一个 Android 应用程序。现在,我有一个 API #1 的源代码,我应该让它适应 API #2。然后我将在不同的包中发布 API #1 和 API #2 的两个版本。我不能使用 values-en 之类的东西,因为这两个版本都可以在全球范围内使用。此外,用户可能没有选择。

由于新版本将使用相同的 UI 和 DB 逻辑,(并且因为现在代码是错误的,)我不想分离代码。如果我使用 c 或 c++ 进行编码,我必须使用 #ifdef 和 Makefile。但是,我在 Java 中。可以通过在运行时确定包名来运行依赖 API 的代码,但这有点奇怪。

我想我可以使用注释。我期望的是:

package foo.app;
public class API {
    public boolean prepare() { ... }
    @TargetPlatform(1)
    public void open() { ... }
    @TargetPlatform(2)
    public void open() { ... }
}

并且只使用其中之一。另外,这很好:

package foo.app;
public class R {
    @TargetPlatform(1) com.example.foo.app.R R;
    @TargetPlatform(2) net.example.foo.app.R R;
}

仅仅定义一个注解很简单。我不知道的是,如何从构建或执行中排除未使用的重复项,等等?如果工作能以这种方式完成,我可以做任何事情。

4

1 回答 1

0

您不能为此使用注释。

最好将实现特定的类隐藏在接口后面。

public interface Api {
  boolean prepare();
  void open();
}

要创建Api实例,请使用工厂类:

public class ApiFactory {
  public static Api createApi() {
    if(isTargetPlatform1()) 
      return new com.example.foo.app.Api();
    else
      return new net.example.foo.app.Api();
  }

  private boolean isTargetPlatform1() {
    // determine the current platform, e.g. by reading a configuration file
  }
}

在所有其他地方,您只引用Api接口和ApiFactory类。像这样使用它:

Api api = ApiFactory.createApi();
api.open();
// ...

更高级的解决方案是使用依赖注入

于 2013-08-06T17:06:51.627 回答