I thought I knew the answer to this, but I can\'t find any confirmation after an hour or so of searching.
In this code:
public class Outer {
// othe
obj2 will be garbage collected since it has no reference to it. obj1 will not be garbage collected as long as the event is active since even if you created an anonymous class, you've created a direct reference to obj1.
The only thing final does is that you can't re-define the value, it doesn't protect the object from the garbage collector