Why does this code fail to compile in Java 7?

Scope and lifetime are distinct yet related issues in programming languages. Languages can sometimes make design decisions that cause a conflict between the scope and the lifetime of variables. Java's decision to allow classes to be defined inside a method illustrates this conflict. Consider the following example: class AnonymousInnerClassInMethod { public static void main(String[] args) { int local = 1; Comparable compare = new Comparable () { public int compareTo(Object value) { return (Integer)value - local; } }; System.out.println(compare.compareTo(5)); } } Why does this code fail to compile in Java 7? Why does it compile in Java 8? What could it be modified so it would compile for Java 7?
Powered by