java 反射 转换,Java中的反射转换和重载方法调度

博客探讨了Java中方法重载的动态调用问题,作者遇到一个情况,即尽管对象的实际类型是特定实现,但Java在运行时仍然选择调用通用接口方法。内容涉及类的多态性、反射以及如何通过反射实现期望的行为。作者寻求避免使用反射的方法,因为这会使代码更整洁,同时考虑了双调度和代码重构的选项。
摘要由CSDN通过智能技术生成

请注意,所有代码都是一个简化的示例,以便只传达我的问题的核心思想.经过轻微编辑后,它应该全部编译并运行.

我有几个类都实现了一个通用接口.

public interface Inter{}

public class Inter1 implements Inter{}

public class Inter2 implements Inter{}

在一个单独的类中,我有一个Inter类型的列表,我用它来存储和删除Inter1和Inter2类型,基于用户输入.

java.util.ArrayList inters = new java.util.ArrayList();

我还有一系列重载方法,它们处理每个实现如何相互交互,以及2个“Inter”的默认实现.

void doSomething(Inter in1, Inter in2){

System.out.println("Inter/Inter");

}

void doSomething(Inter1 in1, Inter1 in2){

System.out.println("Inter1/Inter11");

}

void doSomething(Inter2 in1, Inter1 in2){

System.out.println("Inter2/Inter1");

}

定期调用这些方法如下:

for(int i = 0; i < inters.size() - 1; i++){

for(int o = i+1; o < inters.size(); o++){

Inter in1 = inters.get(i); Inter in2 = inters.get(o);

doSomething(in1.getClass().cast(in1), in2.getClass().cast(in2));

System.out.println("Class 1: " + in1.getClass().getName());

System.out.println("Class 2: " + in2.getClass().getName());

}

}

此示例的输出是:

Inter/Inter

Class 1: Inter

Class 2: Inter

Inter/Inter

Class 1: Inter

Class 2: Inter1

Inter/Inter

Class 1: Inter1

Class 2: Inter1

查看输出,很明显,即使在应该调用其他方法的情况下,也会调用doSomething(Inter in1,Inter in2).有趣的是,输出的类名是正确的.

当运行时使用反射确定类类型时,为什么java会有静态方法重载?

有没有办法让Java这样做?我知道我可以使用反射和Class.getMethod()和method.invoke()来获得我想要的结果,但是使用强制转换它会更加整洁.

我意识到之前已经提出过关于类似概念的问题,但是虽然所有答案都是提供信息的,但没有人满意我.

双重调度看起来会起作用,但这意味着要重新编写很多代码,因为我经常使用这种类型的东西.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值