我有两个平行的类层次结构,我希望将一个类的对象转换为另一个类的对象。我可以通过手动指定要执行的转换来实现,但我需要在实际转换发生时和需要调用它时都要指定转换。有没有一种方法只需指定一次即可?
以下是示例代码,可以正常工作,但我想简化代码。这里有两个转换函数,允许我在输入类(bI,cI)和输出类(bO,cO)之间进行转换。虽然这是不可避免的,但instanceof比较让人感到不舒服。是否有一种优雅的解决方案可以避免它们?
我想要做类似这样的事情:
以下是示例代码,可以正常工作,但我想简化代码。这里有两个转换函数,允许我在输入类(bI,cI)和输出类(bO,cO)之间进行转换。虽然这是不可避免的,但instanceof比较让人感到不舒服。是否有一种优雅的解决方案可以避免它们?
public class ConversionTest {
static public class aI {}
static public class bI extends aI {}
static public class cI extends aI {}
static public class aO {}
static public class bO extends aO {}
static public class cO extends aO {}
// Convert from bI to bO.
private static aO convert(bI iVar) {return new bO();}
// Convert from cI to cO.
private static aO convert(cI iVar) {return new cO();}
public static void main(String argv []) {
// Input variable.
final aI iVar = new bI();
// Output variable.
final aO temp;
// Perform conversion.
if(iVar instanceof bI) {
temp = convert((bI)iVar);
} else if (iVar instanceof cI) {
temp = convert((cI)iVar);
}
}
}
我想要做类似这样的事情:
final a0 temp = convert(iVar.getClass().cast(iVar));
但是在这种情况下,编译器会报告找不到适当的转换函数。也许我可以指定一个包含所有可能转换的数组来尝试?
final a0 temp = convertHelp({bI,cI}, iVar);
我不确定该如何实现这个convertHelp
函数。它将遍历数组并尝试找到适当的转换方式。有什么建议吗?
谢谢。