java 重构,如何将代码提取到泛型方法中?

8wtpewkr  于 2022-11-27  发布在  Java
关注(0)|答案(1)|浏览(138)

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

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;
        //----------------
    }
}

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

iyr7buue

iyr7buue1#

添加方法

public <T> Builder addIfNonNull(List<T> dst, T x)
{
    if (x != null) {
        dst.add(x);
    }   
    return this;
}

并实现类似withUnit

public Builder withUnit( final UnitIf aUnit )
{
    return addIfNonNull(unit, aUnit);
}

并以同样的方式改变withTime

非通用版本

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

public Builder addIfNonNull(List dst, Object x)
{
    if (x != null) {
        dst.add(x);
    }   
    return this;
}

在内部,Java编译器会将List<T>编译为只有List,我认为这被称为“类型擦除”。

相关问题