我一直在研究 Java 中的泛型,在从各种来源学习之后,我尝试构建一个在实例化期间接受 Number 或其子类的泛型类。此类包含一个方法,该方法采用用户创建的相同类型的列表,并将每个值乘以 2,保持原始类型,然后返回修改后的列表。但是,我遇到了代码问题。
import java.util.List;
import java.util.ArrayList;
import java.util.Arrays;
class GenericMultiplier<T extends Number> {
public List<T> multiplyByTwo(List<T> list) {
List<T> resultList = new ArrayList<>();
for (T item : list) {
// Perform multiplication based on the type of Number
if (item instanceof Integer)
resultList.add((T) Integer.valueOf(item.intValue() * 2));
else if (item instanceof Double)
resultList.add((T) Double.valueOf(item.doubleValue() * 2));
}
return resultList;
}
}
public class Main {
public static void main(String[] args) {
List<Integer> intList = Arrays.asList(1, 4, 6, 87, 34);
GenericMultiplier<Integer> multiplier = new GenericMultiplier<>();
List<Integer> doubledList = multiplier.multiplyByTwo(intList);
System.out.println("Original List: " + intList);
System.out.println("Doubled List: " + doubledList);
}
}
虽然代码编译正确,但我收到诸如
之类的警告Type safety: Unchecked cast from Double to T
或
Type safety: Unchecked cast from Integer to T
请帮助减轻这些警告。
“未经检查的强制转换”是编译时警告。 当将原始类型转换为参数化类型而不进行类型检查时,会出现此警告。 编译器允许此转换保持与不支持泛型的旧 Java 版本的向后兼容性。
@SuppressWarnings("unchecked") 在这种情况下是正确的选择。