<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