<Beans Dev> Resolving type of overridden properties

sergey malenkov sergey.malenkov at oracle.com
Thu Oct 31 02:53:10 PDT 2013


Hi Alexey,

Could you please file a bug?
I'll try to fix it.

Thanks,
SAM

On 31.10.2013 0:58, Alexey Makhmutov wrote:
> Hello,
> We've noticed that Introspector behavior has changed in 7u40 compared 
> to 7u25. Here is the example to show the difference. Let's assume that 
> we have two classes:
>   public class A {}
>   public class B extends A {}
>
> And two beans:
>   public class BeanA
>   {
>    public void setData(A value) {}
>
>    public A getData() {return null;}
>   }
>
>   public class BeanB extends BeanA
>   {
>    public void setData(B value) {}
>
>    public B getData() {return null;}
>   }
>
> Here BeanB overrides getData method by using covariant return type. If 
> we run Introspector for BeanB, then 7u25 returns PropertyType of 
> 'data' equal to 'B', while 7u40 reports it as 'A' instead. It seems, 
> that in 7u40 (and later versions) if return type of getter method can 
> be casted to the return type of getter with same name defined in 
> super-class, then Introspector just uses return type of getter in 
> parent class.
>
> If I understand correctly, this change is result of following fix, 
> which was introduced in jdk8 and then ported to 7u40: 
> https://bugs.openjdk.java.net/browse/JDK-7189112.
>
> So, here is my question: is the currently observed behavior in 7u40 a 
> desired one, which will be kept for future java updates? Should we 
> adapt our code to such behavior or just wait for some changes in next 
> updates? Well, overriding properties in children classes (with 
> covariant return type change) doesn't look like a particularly good 
> idea - and such situation was just impossible when JavaBeans spec was 
> originally created (it wasn't possible to override getter with 
> different return type until covariant returns were introduced in Java 
> 5). However, current behavior looks a little counter-intuitive - we 
> have class with pair of matching getter and setter methods, while type 
> of property is resolved to the getter defined in base class. And, of 
> course, such change may break some existing code while upgrading to 
> the 7u40 (as it was in our case).
>
> Thanks,
> Alexey 



More information about the beans-dev mailing list