阅读最新的spring-framework源码发现其中instanceof的用法很特殊, 比如
original instanceof AbstractBeanDefinition originalAbd
this.beanClass instanceof Class clazz
什么时候instanceof 可以拷贝对象了?还是Java新特性?
public abstract class AbstractBeanDefinition extends BeanMetadataAttributeAccessor
implements BeanDefinition, Cloneable {
...
protected AbstractBeanDefinition(BeanDefinition original) {
...
if (original instanceof AbstractBeanDefinition originalAbd) {
if (originalAbd.hasBeanClass()) {
setBeanClass(originalAbd.getBeanClass());
}
...
}
...
}
public String getBeanClassName() {
return (this.beanClass instanceof Class clazz ? clazz.getName() : (String) this.beanClass);
}
...
}
对比以前的代码
if (original instanceof AbstractBeanDefinition) {
AbstractBeanDefinition originalAbd = (AbstractBeanDefinition) original;
if (originalAbd.hasBeanClass()) {
setBeanClass(originalAbd.getBeanClass());
}
}
最新的spring版本使用的是JDK17
instanceof语法改版是在JDK14中
jdk14 新特性
判断引用类型A是否和引用类型B相同,或者说是B的子类,如果是返回true,否则返回false。