我正在浏览 JLS 7 以了解类型转换 Section 5.5.1 。
它说:给定编译时引用类型S(源)和编译时引用类型 T(目标),如果没有发生编译时错误,则从S到T存在转换转换 由于以下规则。 如果S是类类型:
他们明确表示S和T是 Section 4.10 中的两种类型,然后
我无法找到 | S | 的含义。请帮助我理解 | S | 的含义是什么?它是指属性的数量和类型还是其他东西。我试图在 JLS 中搜索它,但找不到它的含义。提前谢谢。
答案 0 :(得分:2)
我无法提供类型擦除文档的更好和更不正式的解释。 在你的情况下(类转换)“如果T是类类型,那么| S |&lt ;: | T |,或| T |<:| S |。否则,发生编译时错误。”意味着,在类型擦除之后,如果泛型类型参数在,则类转换是合法的 “类 - 子类关系”。简单的例子:
static class Bar {}
static class FooBar extends Bar {}
public static void main(String[] args) {
List<FooBar> foobarList = (List<FooBar>) newList(Bar.class);
List<Bar> barList = (List<Bar>) newList(FooBar.class);
System.out.println("No cast class exception :)");
}
private static<T> List<?> newList(Class<T> clazz) {
return new ArrayList<T>();
}
答案 1 :(得分:0)