java 接口动态实现_Java – 从接口到实现的动态类转换

我已经阅读了其他相关的帖子,但仍然不太清楚如何,或者是否可以在

Java中动态地(实现的接口).我的印象是我必须用反思去做.

我正在开展的具体项目需要使用许多支票实例,而且在我看来,这是一个不合时宜的事情,所以不妨感谢任何想法/解决方案.

下面是一个迷你的例子,我写的只是为了澄清我想要做什么.如果您需要更多信息,请告诉我们

接口:

public interface IRobot {

String getName();

}

实现:

public class RoboCop implements IRobot {

String name = this.getClass()+this.getClass().getName();

public RoboCop() {}

public String getName() { return name; }

}

public class T1000 implements IRobot {

String name = this.getClass()+this.getClass().getName();

public T1000() {}

public String getName() { return name; }

}

处理实现的类:

import java.util.LinkedList;

import java.util.List;

public class RobotFactory {

public static void main(String[] args) {

new RobotFactory();

}

public RobotFactory() {

List robots = new LinkedList();

robots.add( new RoboCop() );

robots.add( new T1000() );

System.out.println("Test 1 - Do not cast,and call deploy(robot)");

for(IRobot robot : robots) {

deploy(robot); // deploy(Object robot) will be called for each..

}

System.out.println("Test 2 - use instanceof");

for(IRobot robot : robots) { // use instanceof,works but can get messy

if(robot instanceof RoboCop) {

deploy((RoboCop)robot);

}

if(robot instanceof T1000) {

deploy((T1000)robot);

}

}

System.out.println("Test 3 - dynamically cast using reflection?");

for(IRobot robot : robots) {

//deploy(()robot); //

}

}

public void deploy(RoboCop robot) {

System.out.println("A RoboCop has been received... preparing for deployment.");

// preparing for deployment

}

public void deploy(T1000 robot) {

System.out.println("A T1000 has been received... preparing for deployment.");

// preparing for deployment

}

public void deploy(Object robot) {

System.out.println("An unknown robot has been received... Deactivating Robot");

// deactivate

}

}

[RoboCop@42e816,T1000@9304b1]

Test 1 - Do not cast,and call deploy(robot)

An unknown robot has been received... Deactivating Robot

An unknown robot has been received... Deactivating Robot

Test 2 - use instanceof

A RoboCop has been received... preparing for deployment.

A T1000 has been received... preparing for deployment.

Test 3 - dynamically cast using reflection?

所以,总结一下我的问题,在这种情况下我怎么能完全避免使用instanceof.谢谢.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值