正如其他人所说,您的实际问题的答案是否定的。
但是,您可以通过隔离 Android 或桌面代码来解决您的问题。您可以通过在 eclipse 中拥有三个独立的项目来做到这一点:
- 核心:这是两个版本之间存在的“共享”代码。
- Android:这仅包含在 Android 上运行的代码。
- 桌面:这仅包含在桌面上运行的代码。
您的 Android 和桌面项目都将在其类路径中包含 Core 项目。在 Eclipse 中,您可以通过转到 Java 构建路径,然后单击“项目”选项卡,然后将核心项目添加到“必需项目”列表中来完成此操作。
然后您将设置您的代码,以便您的 Android 和桌面项目是您实际部署的项目,并且您的核心项目包含它们之间共享的代码。这是一个简单的例子。假设我们有一个如下所示的示例类:
public class Adder{
public void addAndPrint(int x, int y){
//code that will work on both Android and desktop
int sum = x+y;
if (ANDROID){
//code that will only work on Android
Log.v("example", "Sum:" + sum);
}
else{
//code that will only work on desktop
System.out.println("Sum: " + sum)
}
}
}
您可以通过重构代码以隔离可在桌面和 Android 上运行的“核心”代码来解决此问题。像这样的东西:
//example core class
public class CoreAdder{
Printer printer;
public CoreAdder(Printer printer){
this.printer = printer;
}
public void addAndPrint(int x, int y){
int sum = x+y;
printer.print("Sum: " + sum);
}
}
//example core interface. We might print differently on
//Android and Desktop, so implement this interface in each.
public interface Printer{
public void print(String printMe);
}
然后,您将隔离仅适用于桌面的代码:
//on desktop, use System.out.println()
public class DesktopPrinter implements Printer{
public void print(String printMe){
System.out.println(printMe);
}
}
//on desktop, entry point is main()
public class DesktopMain{
public static void main(String... args){
DesktopPrinter printer = new DesktopPrinter();
CoreAdder adder = new CoreAdder(printer);
adder.addAndPrint(1, 2);
}
}
以及仅适用于 Android 的代码:
//on Android, use a logger
public class AndroidPrinter implements Printer{
public void print(String printMe){
Log.v("example", "index=" + i);
}
}
//on Android, entry point is Activity
public class AndroidActivity extends Activity{
public void onCreate(Bundle savedInstanceState) {
AndroidPrinter printer = new AndroidPrinter ();
CoreAdder adder = new CoreAdder(printer);
adder.addAndPrint(1, 2);
}
}
请注意,这只是一个示例,我知道两者都System.out.println()可以Log.v()在任何一个平台上工作。但想法是一样的:将您的项目拆分为多个项目,并使用接口抽象出平台之间变化的行为。