A instanceof B b 是什么用法
阅读最新的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());
}
}