Синтетический класс на Java - PullRequest
       106

Синтетический класс на Java

133 голосов
/ 30 декабря 2008

Что такое синтетический класс в Java? Зачем его использовать? Как я могу использовать это?

Ответы [ 12 ]

0 голосов
/ 04 апреля 2015

Синтетический класс не появляется в вашем коде: он составлен компилятором. Например. Метод моста, составленный компилятором в Java, обычно является синтетическим.

public class Pair<T> {
    private T first;
    private T second;
    public void setSecond(T newValue) {
        second = newValue;
    }
}


public class DateInterval extends Pair<String> {
    public void setSecond(String second) {
        System.out.println("OK sub");
    }

    public static void main(String[] args) throws NoSuchFieldException, SecurityException {
        DateInterval interval = new DateInterval();
        Pair pair = interval;
        pair.setSecond("string1");
    }
}

С помощью команды javap -verbose DateInterval вы можете увидеть метод моста:

public void setSecond(java.lang.Object);
flags: ACC_PUBLIC, ACC_BRIDGE, ACC_SYNTHETIC

Это было составлено компилятором; он не отображается в вашем коде.

0 голосов
/ 02 февраля 2015

Синтетические конструкции - это классы, методы, поля и т. Д., Которые не имеют соответствующей конструкции в исходном коде. Синтетические конструкции позволяют компиляторам Java реализовывать новые функции языка Java без изменений в JVM. Однако синтетические конструкции могут различаться в разных реализациях компилятора Java, что означает, что файлы .class также могут различаться в разных реализациях.

...