【发布时间】:2015-05-04 13:55:17
【问题描述】:
假设我有如下情况:
一个类X 有一个s 类型为S 的字段。
S 由 A 和 B 两个类扩展,它们都实现了一些我们都知道应该在 S 中实现的相同方法/字段,但不幸的是,情况并非如此。
现在我想做这样的事情:
"A or B" downcast_field;
if(s instanceof A)
downcast_field = (A)s;
else if (s instanceof B)
downcast_field = (B)s;
//do something common for the two cases but that need methods implemented both in A and B
问题是事先有一个静态类型(在IFs 之外),它允许我调用这些方法。
我想由于糟糕的设计,这实际上是不可能的,我必须编写两次相同的代码,这很难看,但也许有一个我现在没有看到的解决方案。
【问题讨论】:
-
可以给
A和B添加接口吗? -
这个设计很糟糕的人!你需要改变它
-
@pratik 如果可能的话,我早就这么做了!不幸的是,它必须暂时保持这种状态
-
你在哪个班级使用上面的代码?理想情况下,A 或 B 可以使用 S 本身来表示
-
在X类中,字段为S类型。
标签: java inheritance instanceof dynamic-cast static-typing