我编写了一个辅助方法,用于通过反射获取指定类型的静态字段的值。代码工作正常,但我在线收到“参数化类的原始使用”警告:
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) 我使用Oracle JDK 7,当我构建项目时,我收到了以下消息:
missing type arguments for generic class Class<T> where T is a type-variable:
T extends Object declared in class Class
Run Code Online (Sandbox Code Playgroud)
这是班级:
public class Among {
private static final Class<?>[] EMPTY_PARAMS = new Class[0]; //warning line
Run Code Online (Sandbox Code Playgroud)
任何想法如何解决它.它在很多地方使用,我有很多警告.