Hi all,

Java 8 introduced the ability to access effectively final variables/method
parameters from anonymous classes without having to add explicitly the
"final" keyword.

This has resulted in a lot of cases where the programmer does not notice
that they are referencing a model object from an anonymous class, which
results in the model object being serialized.

Example:
code inside a hypothetical MyPanel.newLink() method...

Myclass obj = getModelObject();
return new AjaxLink<Void>("link") {
void onClick(AjaxRequestTarget t) {
 if (obj.getId() != null) {
   // do something
 } else {
  // do something else
 }
}

In previous java versions you'd have to declare obj as final, and this
would help you notice that it is going to be serialized.

I understand that it is easy to change the code and avoid obj being
serialized. The problem is not how to fix the code - the problem is that
this "problem" often goes unnoticed.

As far as I have searched, there is no way to disable this behavior (not
having to explicitly declare variables as final) in java 8.

Do you have any suggestions on how to handle this?

Thank you in advance,
Marios

Reply via email to