Ten dolar mě trošku překvapil - on bývá běžně vnitřně používán na vnitřní a anonymní třídy. To znamená, že pokud odstraním příznak synthetic, tak mohu používat tyto třídy i pomocí dolaru? Třeba takto?:
Foo.java:
class Foo{
private static Object x = new Comparator<String>(){...}
}
Bar.java:
public class Bar{
public static void main(String...args){
System.out.println((new Foo$1().compare("a", "b"));
}
}
je to presne jak pisete. Podivejte se prosim na nasledujici zdrojak, samozrejme prelozitelny.
(chybi typ u seznamu, ma tam byt samozrejme String, ale kvuli orezani HTML znacek jsem to radeji odtranil, tak me nebijte :-)
import java.util.*;
class Test$1
{
}
class Test$2
{
}
public class Test
{
public static void main(String[] args)
{
List list = new ArrayList(){
{
add("hello");
add("world");
}
};
}
}
Vysledkem prekladu budou ctyri soubory:
jinymi slovy - prekladac si nejakou magii zjisti, jak anonymni tridy pojmenovat a prida do bajtkodu priznak synthetic.