小编dsa*_*kas的帖子

参数化类的原始使用

我编写了一个辅助方法,用于通过反射获取指定类型的静态字段的值。代码工作正常,但我在线收到“参数化类的原始使用”警告:

final List<Collection> fields = getStaticFieldValues(Container.class, Collection.class);
Run Code Online (Sandbox Code Playgroud)

问题是类型参数 T 可以是泛型类型。有没有办法重写方法getStaticFieldValues来解决这个问题?

代码清单:

import static java.util.Arrays.asList;
import static org.junit.Assert.assertEquals;

import java.lang.reflect.*;
import java.util.*;

import org.junit.Test;

public class GenericsTest {

    @Test
    public void test() {
        // Warning "raw use of parameterized class 'Collection'"
        final List<Collection> fields = getStaticFieldValues(Container.class, Collection.class);
        assertEquals(asList("A", "B", "C"), fields.get(0));
    }

    private static <T> List<T> getStaticFieldValues(Class<?> fieldSource, Class<T> fieldType) {
        List<T> values = new ArrayList<>();
        Field[] declaredFields = fieldSource.getDeclaredFields();
        for (Field field : declaredFields) {
            if (Modifier.isStatic(field.getModifiers()) && …
Run Code Online (Sandbox Code Playgroud)

java generics

53
推荐指数
1
解决办法
9万
查看次数

标签 统计

generics ×1

java ×1