在org.springframework.core.SerializableTypeWrapper
(版本 5.2.3)中,第 112 行有以下代码:
if (GraalDetector.inImageCode() || !Serializable.class.isAssignableFrom(Class.class)) {
// Let's skip any wrapping attempts if types are generally not serializable in
// the current runtime environment (even java.lang.Class itself, e.g. on Graal)
return providedType;
}
我对第二个检查 ( !Serializable.class.isAssignableFrom(Class.class)
) 感到好奇:它是否可以评估为true
(也就是说,Serialazable.class
不能从 分配Class.class
)?
这是Class#isAssignableFrom()
javadoc 所说的:
确定此 Class 对象表示的类或接口是否与指定的 Class 参数表示的类或接口相同,或者是其超类或超接口。
查看 的代码Class
,我看到以下内容:
public final class Class<T> implements java.io.Serializable
Serializable
的超接口也是如此,Class
并且应该始终可以从Class
. 但 Spring 代码中的检查表明有时并非如此。
怎么来的?在什么情况下会发生这种情况,为什么它们不违反 Java 语言规范?