- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在浏览一些关于 Java 反射和泛型的 Jakov Jenkov 博客时,我发现了以下段落:
When runtime inspecting a parameterizable type itself, like
java.util.List
, there is no way of knowing what type is has been parameterized to. This makes sense since the type can be parameterized to all kinds of types in the same application. But, when you inspect the method or field that declares the use of a parameterized type, you can see at runtime what type the paramerizable type was parameterized to.
谁能详细说明一下这一段吗?
我对“当运行时检查可参数化类型本身时”这句话感到困惑
最佳答案
考虑以下小程序:
import java.util.ArrayList;
class MyClass {
ArrayList<String> stringList;
public ArrayList<String> getStringList() {
return stringList;
}
}
public class Foo {
public static void main(String... args) throws NoSuchMethodException {
ArrayList<Integer> intList = new ArrayList<>();
System.out.println(intList.getClass().toGenericString());
System.out.println(MyClass.class.getMethod("getStringList").toGenericString());
}
}
该程序的输出是:
public class java.util.ArrayList<E>
public java.util.ArrayList<java.lang.String> MyClass.getStringList()
如您所见,事实上 intList
是 ArrayList<Integer>
在运行时未知,但事实上 MyClass.getStringList()
返回 ArrayList<String>
是。
原因是,所有 ArrayList
实例(其中一些可能是 ArrayList<Integer>
,其他实例是 ArrayList<String>
)共享相同的 Class
。对象:
ArrayList<String> stringList = new ArrayList<>();
ArrayList<Integer> intList = new ArrayList<>();
System.out.println(stringList.getClass() == intList.getClass());
会输出true
。所以intList.getClass()
无法知道有关对象的类型参数的任何信息。
另一方面,MyClass.getStringList()
返回的对象始终是一个字符串列表,并且可以在运行时看到这些信息。
关于Java 泛型和反射(jenkov 博客),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36006795/
在浏览一些关于 Java 反射和泛型的 Jakov Jenkov 博客时,我发现了以下段落: When runtime inspecting a parameterizable type itself
我是一名优秀的程序员,十分优秀!