Hi Marios, I don't think there is a way to disable this behaviour but you have other options:
- If you use IntelliJ, you can configure the "Local variable or parameter can be final" inspection to raise an error instead of a warning (for variables that are implicitly final) - Checkstyle or similar tools that you can hook into your build process might have similar inspections Best, Thomas On Sun, Aug 4, 2019 at 9:18 AM mscoon <[email protected]> wrote: > 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 >
