首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >重构。如何将代码提取到泛型方法?

重构。如何将代码提取到泛型方法?
EN

Stack Overflow用户
提问于 2022-11-25 18:44:55
回答 1查看 39关注 0票数 0

为了避免代码中的重复,是否有方法将所选代码提取到单独的方法中?

代码语言:javascript
复制
class Builder
{
    private final List< UnitIf > unit = new ArrayList<>();
    private final List< TimeIf > time = new ArrayList<>();

    public Builder withUnit( final UnitIf aUnit )
    {
        //Extract to method
        if( aUnit != null )
        {
            unit.add( aUnit );
        }
        return this;
        //----------------
    }

    public Builder withTime( final TimeIf aTime )
    {
        //Extract to method
        if( aTime != null )
        {
            time.add( aTime );
        }
        return this;
        //----------------
    }
}

我的目标是通过消除重复来简化代码。但是代码的各个部分使用不同的数据类型。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-25 21:10:11

添加一种方法

代码语言:javascript
复制
public <T> Builder addIfNonNull(List<T> dst, T x)
{
    if (x != null) {
        dst.add(x);
    }   
    return this;
}

并实现类似的withUnit

代码语言:javascript
复制
public Builder withUnit( final UnitIf aUnit )
{
    return addIfNonNull(unit, aUnit);
}

并以同样的方式改变withTime

非通用版本

如果不希望它是泛型方法,只需省略类型参数T并将x的类型更改为Object

代码语言:javascript
复制
public Builder addIfNonNull(List dst, Object x)
{
    if (x != null) {
        dst.add(x);
    }   
    return this;
}

在内部,Java编译器将List<T>编译成List。我想这叫做“类型擦除”。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74576860

复制
相关文章

相似问题

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