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() } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |