加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 同一个instanceof但不同类的方法不可见

发布时间:2020-12-15 04:28:14 所属栏目:Java 来源:网络整理
导读:我有类似下面的内容: Item var; 根据用户输入,它将初始化为不同的类: if (/*user input*/ == 1) { var = new Item();} else { var = new Truck();} 这些类定义为: public class Truck extends Item { public void someMethod(); public void exclusiveMet
我有类似下面的内容:

Item var;

根据用户输入,它将初始化为不同的类:

if (/*user input*/ == 1) {
    var = new Item();
} else {
    var = new Truck();
}

这些类定义为:

public class Truck extends Item {
    public void someMethod();
    public void exclusiveMethod();
}
public class Item {
    public void someMethod();
}

Note Truck有一个独有的方法,item没有的exclusiveMethod().根据某些条件,将在var上调用一系列方法:

// will only return true if var was initialized as Truck
if (/*conditions*/) {
    var.someMethod();
    var.exclusiveMethod();
} else {
    var.someMethod();
}

Netbeans弹出一个错误,即找不到exclusiveMethod(),因为它不在Item中.只有当var被初始化为Truck时,我才需要使用exclusiveMethod()的方法可见性.但是我有一些限制:Item var;必须在我的代码之前在其他逻辑之前,我不能创建一个接口,然后我在Item和Truck中实现.我也无法修改公共类Item {}.

我能做什么?

解决方法

您可以使用反射API来调用exclusiveMethod.

代码看起来像 –

Method m = var.getClass().getMethod("exclusiveMethod",null);
if(m != null) {
    m.invoke(var,null);
}

您可以在此处获取有关relfection API的更多信息 – http://docs.oracle.com/javase/tutorial/reflect/index.html

另一种获得此方法的方法是将var转换为Truck,如果您确定var是Truck类型的对象.这个示例代码是 –

if(var instanceof Truck) {
    ((Truck)var).exclusiveMethod()
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读