我可以避免这种投射警告吗?

时间:2014-07-01 18:26:47

标签: java generics java-8

假设我有这个界面

public interface HavingName {
    HavingName withName(String name);
    String getName();
}

此接口有多个实现,每个实现实现工厂方法withName,该方法返回其类型的新实例,仅使用新名称。

现在我想编写一个NameSanitizer,它可以迭代具体的HavingName实例列表,并根据某些规则清理每个名称

class NameSanitizer {

    public <T extends HavingName> List<T> sanitizeNames(List<T> lines) {
        return FluentIterable.from(lines).transform(new Function<T, T>() {
            @Override
            public T apply(T line) {
                return sanitizeName(line);
            }
        }).toList();
    }

    // TODO: how to avoid this casting warning?
    private <T extends HavingName> T sanitizeName(T line) {
        final String name = line.getName();
        return shouldSanitize(name) ?
                (T) line.withDisplayName(sanitize(name)) : line;
    }
}

我很想知道他们是否有办法避免施法警告

0 个答案:

没有答案