java - 动态转换为 uknown 类 java
问题描述
通过建议使用 switch 或 if-else 语句来回答所有其他此类问题,我想完全避免。所以我有一个带有两个重载方法的客户端类,它们使用某些接口实现的两个不同实例。为简单起见:
public interface MyInterface<R extends Register> {
Object myServiceMethod(R register);
然后有一个客户端有两种方法
public Double methodName(Class1 name1)
public Double methodName(Class2 name2)
Class1 和 Class2 都实现 Register 的地方。而我在 MyService 实现中需要做的是调用正确的方法而不知道它会先验哪个类
public class MyServiceImplementation implements MyInterface<Register>{
@Override
public Object myServiceMethod(Register myRegister){
return myClient.methodName(*and here is a place for magic)
}
我需要做类似的事情:
return myClient.methodName((myRegister.getClass()) myRegister);
但由于这是非法的 - 我的问题就在这里。
解决方案
这听起来很糟糕的面向对象设计,但这里是如何做你所追求的。基本上,您似乎试图在编译时进行运行时多态性,这在 Java 中不起作用。(一些动态语言,例如 Groovy,可以做到这一点。)所以你需要明确地进行微分:
if (myRegister instanceOf Class1)
myClient.methodName((Class1) myRegister); // Selects this overload at compile time
else if (myRegister instanceOf Class2)
myClient.methodName((Class2) myRegister);
else
throw new RuntimeException("Unrecognized type: " + myRegister.getClass());
推荐阅读
- flutter - Flutter GetX 无法分配 Set
到 RxSet - javascript - 如何使用 next.js 制作反向代理
- flutter - Flutter:第一次执行后Bloc不起作用
- angular - 我的服务的“解析期间的 Http 失败”
- c# - 如何在 C# 中使用另一个类更改变量
- python - 如何在不按任何按钮的情况下显示对话框?
- reactjs - 错误:使用 UNSAFE_componentWillReceiveProps (NextJs / Redux)
- sql - 非静音参与活动中的未读消息
- flutter - 颤振结合两个流,其中第二个取决于第一个?
- excel - 如何使用 IF 逻辑分类为收入或债务