Search code examples
javascopeanonymous-class

Java: Anonymous inner class using a local variable


How can I get the value of userId passed to this method in my anonymous inner subclass here?

public void doStuff(String userID) {
    doOtherStuff(userID, new SuccessDelegate() {
        @Override
        public void onSuccess() {
            Log.e(TAG, "Called delegate!!!! "+ userID);
        }
    });
}

I get this error:

Cannot refer to a non-final variable userID inside an inner class defined in a different method

I'm pretty sure I can't assign it as final since it's a variable with an unknown value. I had heard that this syntax does preserve scope in some way, so I think there must be a syntax trick I don't quite know yet.


Solution

  • Sure you can assign it as final - just put that keyword in the declaration of the parameter:

    public void doStuff(final String userID) {
       ...
    

    I'm not sure what you meant about it being a variable with an unknown value; all that final means is that once a value is assigned to the variable, it cannot be re-assigned. Since you're not changing the value of the userID within your method, there's no problem making it final in this case.