Hi Gary,

sorry for my short message. I did not have the time to have a deep look
into this.

2014/1/31 Gary Gregory <garydgreg...@gmail.com>

> Looking at FieldUtils some more... setAccessible(true) is never rollback
> with a matching setAccessible(false).
>
> This is a non-trivial side effect.
>
> I am wondering whether this side effect should be perpetuated with removing
> final modifiers:
>
> - Should removeFinalModifier have balanced calls to setAccessible()? It
> does after my change today.
>

This makes sense to me. Nice catch.


> - I would like to call removeFinalModifer when forceAccess is true (see my
> message that started this thread)
>
- Should all FieldUtils methods be balanced? They are not now and my
> experiment to do so shows that some unit tests fail because they depend on
> the side effect.
>
>
So you mean when I call:

FildUtils.writeField(myObject, "field",  newValue, true)

it will the a private field public and remove the final modifier to make it
writable. After writing is complete the initial state is restored. This
sounds reasonable to me. I don't see a use case where I want to write to a
private field using reflection but only if it is non final.


> Since the side effect is not documented as permanent or transient (to the
> method call), most Javadocs say that forceAccess means setAccessible(true)
> but does not specify if this is permanent or temporary.
>
> It seems pretty a "leaky" side-effect, for lack of a better term.


> Thoughts?
>

The initial state should always be restored.


>
> Gary
>
>
>
> On Thu, Jan 30, 2014 at 1:46 PM, Gary Gregory <garydgreg...@gmail.com
> >wrote:
>
> > Yes.
> >
> > Another issue is that the way the code is currently factored means that
> > you'd get write access when you only need read...
> >
> > Gary
> >
> >
> > -------- Original message --------
> > From: Benedikt Ritter
> > Date:01/30/2014 13:22 (GMT-05:00)
> > To: Commons Developers List
> > Subject: Re: [LANG] FieldUtils forceAccess does not force access for
> final
> >
> > So the point you're making is that accessibility alway includes write
> > access?
> >
> >
> > 2014/1/29 Gary Gregory <garydgreg...@gmail.com>
> >
> > > Hi All:
> > >
> > > I have a use case where I need to use reflection to set a public static
> > > final Object.
> > >
> > > This does not work with our FieldUtils class because the "forceAccess"
> > > argument is only used to deal with field visibility by calling
> > > Field#setAccessible(boolean)
> > >
> > > Q1: Should "forceAccess" be expanded to remove the final modifier? Or:
> > > Q2: Should we add another boolean parameter "forceWrite" to remove the
> > > FINAL modifier?
> > >
> > > I like Q1.
> > >
> > > Q3: The Accessible flag is NOT reset if changed after a write! I think
> it
> > > should be. Thoughts?
> > >
> > > Gary
> > >
> > > --
> > > E-Mail: garydgreg...@gmail.com | ggreg...@apache.org
> > > Java Persistence with Hibernate, Second Edition<
> > > http://www.manning.com/bauer3/>
> > > JUnit in Action, Second Edition <http://www.manning.com/tahchiev/>
> > > Spring Batch in Action <http://www.manning.com/templier/>
> > > Blog: http://garygregory.wordpress.com
> > > Home: http://garygregory.com/
> > > Tweet! http://twitter.com/GaryGregory
> > >
> >
> >
> >
> > --
> > http://people.apache.org/~britter/
> > http://www.systemoutprintln.de/
> > http://twitter.com/BenediktRitter
> > http://github.com/britter
> >
>
>
>
> --
> E-Mail: garydgreg...@gmail.com | ggreg...@apache.org
> Java Persistence with Hibernate, Second Edition<
> http://www.manning.com/bauer3/>
> JUnit in Action, Second Edition <http://www.manning.com/tahchiev/>
> Spring Batch in Action <http://www.manning.com/templier/>
> Blog: http://garygregory.wordpress.com
> Home: http://garygregory.com/
> Tweet! http://twitter.com/GaryGregory
>



-- 
http://people.apache.org/~britter/
http://www.systemoutprintln.de/
http://twitter.com/BenediktRitter
http://github.com/britter

Reply via email to