2

我正在开发一个 Java 项目,该项目很可能在未来支持 Android。但据我所知,Android 具有与默认 Java 不同的类/API(例如,我不认为 android 具有所有 AWT 的东西)。所以我想知道的是,我如何编写代码,以便如果它在 Android 上运行,它将使用 android API,如果它在桌面上,它使用标准 Java API。我研究了条件导入,但与 C++ 不同,Java 中不存在。那么这种事情在Java中是如何解决的。

这是我希望能够做的一个例子:

int[] i;
if(onAnroid)
{
    i = androidFoo.bar();
} else {
    i = javaFoo.bar();
}

编辑: 我想到的一件事是使用 Common 类,所以我不直接调用 API。但是我试图弄清楚的是如何调用这些类,它们不一定存在,而编译器不会抱怨这些类不存在。

4

4 回答 4

3

您可以创建与任何特定用户界面工具包无关的架构层。如果这些需要与用户界面交互,它们可以通过接口类型来实现。

在这些层之上,您可以使用不同的工具包创建多个表示层。

将软件移植到新的用户界面是很常见的。从一开始就分离架构层的成本很低。稍后解开一个单体可能会很昂贵,有时甚至到了对公司来说在经济上不可行的程度。无论移植的要求是确定的、可能的还是未知的,尽早分离架构层都是一种很好的做法。

于 2013-05-22T19:03:59.523 回答
2

您将不得不分离您的代码,但不是这样。您的类需要设计为将依赖于平台的代码与不依赖于平台的代码分开。您应该专注于将应用程序的核心逻辑保留在一层中,并将屏幕上的对象呈现在另一层中。

于 2013-05-22T19:04:43.720 回答
1

关于不必要的现有类,您可以这样调用:

try {
       MyObject o = (MyObject)Class.forName("org.me.MyObject").newInstance();
} catch(ClassNotFoundException x) {
     // Here you know class does not exist
}

实际上,你应该做得比这更好,但我不记得了。但无论如何与此类似。

于 2013-05-22T19:12:03.800 回答
0

依赖注入可能可以满足您的需求。有几个框架:http ://en.wikipedia.org/wiki/Dependency_injection#Frameworks_that_support_dependency_injection

于 2013-05-22T19:02:33.303 回答