我有3个项目:desktop_starter
,android_starter
和platform
。两个入门项目都引用platform
项目,而platform
项目应该是(99%)平台无关的,并且几乎包含所有代码。
原因是我希望能够在桌面上运行Android应用程序,而无需使用模拟器。
但至少在一个地方,我需要在platform
中调用特定于平台的代码。具体来说,我需要在桌面上使用javax.ImageIO
或android.graphics.Bitmap
逐像素地读取图片。
由于Java AFAIK中没有预处理器或类似结构,我有哪些选择?
platform
并使用反射我猜,但那很脏。答案 0 :(得分:3)
您可以简单地在定义所需方法的接口上编写平台代码,并从特定于平台的项目中传递此接口的特定于平台的实现。
例如,如果你需要的是一个包含图像所有像素的int数组(只是一个例子),接口将是:
public interface ImageReader {
int[] getImagePixels(InputStream in) throws IOException;
}
你将有两个接口实现:一个在桌面项目内部使用ImageIO,另一个在android项目内部使用Bitmap。其中一个类的实例将传递给与平台无关的代码。