gpt4 book ai didi

Java 平台相关的类继承

转载 作者:行者123 更新时间:2023-12-02 05:18:54 25 4
gpt4 key购买 nike

我开发了一个 Java 库,它将在两个不同的平台上运行。要打印消息,一个平台使用 printA(str) 方法,而另一个平台则使用 printB(str) 方法。在 C++ 中,我将创建一个静态方法:

public static void print(string str)
{
#ifdef platformA
printA(str);
#else
printB(str);
#endif
}

由于 Java 没有 #ifdef,因此它变成了一项棘手的任务。我开始考虑用静态方法重写抽象类,但不确定我的方向是否正确。最优雅的方法是什么?

<小时/>

编辑:根据安迪托马斯的回答(谢谢!)我找到了适合我的解决方案。唯一的缺点 - 它必须在启动时初始化。下面是代码。公共(public)库:

//interface is only for internal use in Output class
public interface IPrintApi
{
public void Print(String message);
}

public abstract class Output
{
private static IPrintApi m_api;
public static void SetPrintAPI(IPrintApi api)
{
m_api=api;
}

public static void MyPrint(String message)
{
m_api.Print(message);
}
}

此函数的调用在公共(public)库和特定于平台的代码中是相同的:

public class CommonTest 
{
public CommonTest()
{
Output.MyPrint("print from library");
}
}

每个平台的代码必须具有特定于平台的接口(interface)实现,例如平台A(对于B来说是相同的):

public class OutputA implements IPrintApi
{
public void Print(String message)
{
//here is our platform-specific call
PrintA(message);
}
}

用法:

public class AppPlatformA
{
public static void main(String[] args)
{
// point the abstract Output.Print function to the available implementation
OutputA myPrintImpl = new OutputA();
Output.SetPrintAPI(myPrintImpl);
// and now you can use it!
Output.MyPrint("hello world!");
}
}

最佳答案

使用常量表达式:

private static final boolean PLATFORM_A = true;

public static void print(string str)
{
if(PLATFORM_A )
{
printA(str);
}
else
{
printB(str);
}
}

关于Java 平台相关的类继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26657869/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com