首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >替换Java实例

替换Java实例
EN

Stack Overflow用户
提问于 2015-05-12 12:25:44
回答 1查看 396关注 0票数 2

在我们有JavaBeans的项目中,我遇到了一些代码。我发现了一个将这些bean写入文件的Writer对象。不幸的是,在编写文件之前,这使用instanceof来询问bean是什么类型,如下所示:

代码语言:javascript
运行
复制
if (bean instanceof BeanA) {
    writer.handleBeanA(bean);
} else if (bean instanceof BeanB) {
    writer.handleBeanB(bean);
} else if (bean instanceof BeanC) {
    writer.handleBeanC(bean);
}

这太难看了,我想把它换掉。因此,我考虑将我的作者分成新的类WriterBeanAWriterBeanBWriterBeanCWriter。我这样做是因为显然为了保持我的JavaBean结构,我不能向Beans中添加一个方法write()

当我调用Writer时,我将我的bean作为一个抽象父Bean传入,因为调用这个作者的函数并不关心它处理的是哪种类型的bean。

现在我开始编写我的新类--我遇到了一个问题,我正在重写的函数如下所示:

代码语言:javascript
运行
复制
public abstract boolean <T extends Bean> writeBean(T bean);

但是BeanAWriter中的代码如下所示:

代码语言:javascript
运行
复制
public abstract boolean <T extends Bean> writeBean(T bean) {
    bean.accessBeanAProperty();
}

这段代码不能工作,因为T只被识别为Bean而不是BeanA,这意味着我的instanceof只是被转换为BeanA.

有人能找到解决这个问题的办法吗?

(我不想丢弃JavaBeans,也不想听到它是一种反模式,因为更改bean可能会导致大量代码倒退)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-12 12:39:29

您可以使用基于类的泛型而不是基于方法的泛型:

代码语言:javascript
运行
复制
public abstract class BeanWriter<T extends Bean> {
    public abstract boolean writeBean(T bean);
}

public class BeanAWriter extends BeanWriter<BeanA> {
    public boolean writeBean(BeanA bean) {
        bean.accessBeanAProperty();
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30190837

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档