JAVA 泛型警告

问题描述 投票:0回答:1

我一直在研究 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 oop generics collections type-safety
1个回答
0
投票

“未经检查的强制转换”是编译时警告。 当将原始类型转换为参数化类型而不进行类型检查时,会出现此警告。 编译器允许此转换保持与不支持泛型的旧 Java 版本的向后兼容性。

@SuppressWarnings("unchecked") 在这种情况下是正确的选择。

© www.soinside.com 2019 - 2024. All rights reserved.