假设我有这个界面
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;
}
}
我很想知道他们是否有办法避免施法警告