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

138
задан Michael 11 January 2017 в 18:08
поделиться

7 ответов

Например, Когда у Вас есть оператор переключения, Java создает переменную, которая запускается с $. Если Вы хотите видеть пример этого, быстрого взгляда в отражение Java класса, который имеет оператор переключения в нем. Вы будете видеть эти переменные, когда у Вас будет по крайней мере один оператор переключения где угодно в классе.

Для ответа на вопрос я не полагаю, что Вы можете получить доступ (кроме отражения) к синтетическим классам.

при анализе класса, что Вы ничего не знаете о (через отражение) и должны знать очень определенные и вещи низкого уровня о том классе, можно закончить тем, что использовали методы отражения Java, которые имеют отношение к синтетическим классам. Единственное "использование" здесь, получают больше информации о классе для использования его соответственно в коде.

(При выполнении этого Вы, вероятно, создаете платформу некоторых видов, которые могли использовать другие разработчики.)

Иначе, если Вы не используете отражение, нет никаких практических применений синтетических классов, о которых я знаю.

15
ответ дан 23 November 2019 в 23:29
поделиться

Java имеет способность создать классы во времени выполнения. Эти классы известны как Синтетические Классы или Динамические Прокси.

См. http://java.sun.com/j2se/1.5.0/docs/guide/reflection/proxy.html для получения дополнительной информации.

Другие библиотеки с открытым исходным кодом, такой как CGLIB и ASM также позволяет Вам генерировать синтетические классы и более мощен, чем библиотеки, которым предоставляют JRE.

Синтетические классы используются библиотеками AOP (Aspect Oriented Programming), такими как Spring AOP и AspectJ, а также библиотеки ORM те, которые В спящем режиме.

106
ответ дан 23 November 2019 в 23:29
поделиться

Хорошо я нашел ответ на первый вопрос на Google:

класс А может быть отмечен как синтетический продукт, если он сгенерирован компилятором, то есть, это не появляется в исходном коде.

Это - просто основное определение, но я нашел, что оно на форуме распараллеливает и не было никакого объяснения. Все еще ища лучший...

54
ответ дан 23 November 2019 в 23:29
поделиться

Также Синтетические Классы или Динамические Прокси используются EasyMock для создания реализаций интерфейсов или абстрактных классов во времени выполнения.

http://www.easymock.org/

3
ответ дан 23 November 2019 в 23:29
поделиться

Согласно это обсуждение , хотя спецификация языка описывает "isSynthetic" proprty для классов, это в значительной степени игнорируется реализациями и не используется или для динамических прокси или для анонимных классов. Синтетические поля и конструкторы используются для реализации вложенных классов (нет понятия вложенных классов в коде байта, только в исходном коде).

я думаю, что понятие синтетических классов, просто оказалось, было не полезно, т.е. никто не заботится, является ли класс синтетическим продуктом. С полями и методами, это, вероятно, используется точно в одном месте: для определения, что показать в представлении структуры класса IDE - Вы хотите нормальные методы, и поля для разоблачения там, но не синтетические раньше моделировали вложенные классы. OTOH, Вы ДЕЙСТВИТЕЛЬНО хотите, чтобы анонимные классы обнаружились там.

8
ответ дан 23 November 2019 в 23:29
поделиться

, Что такое синтетический класс в Java?

А synthetic класс .class файл, сгенерированный [1 112] Компилятор Java , и он не существует в исходном коде.

использование В качестве примера synthetic класс: Анонимный внутренний класс

  • java.text. 1 DigitList$ synthetic класс, и это - анонимный внутренний класс в java.text. DigitList
  • И нет никакого файла исходного кода, названного как DigitList$1.java, но это - внутренний файл в DigitList.java

, Почему это должно использоваться?

Это - механизм в логике компилятора Java для генерации .class файл

, Как я могу использовать его?

нет, разработчики делают НЕ использование это непосредственно.

использование компилятора Java synthetic для генерации .class файл, и затем JVM читает .class файл для выполнения логики программы.

[еще 1121] подробные данные

  • Этот статья объясняет synthetic класс в подробных данных
  • Этот ссылка списки весь synthetic выходы класса в [1 117] JDK

0
ответ дан 23 November 2019 в 23:29
поделиться

синтетические классы / методы / поля:

Эти вещи важны для виртуальной машины. Взгляните на следующий фрагмент кода:

class MyOuter {

  private MyInner inner;

  void createInner() {
    // The Compiler has to create a synthetic method
    // to construct a new MyInner because the constructor
    // is private.
    // --> synthetic "constructor" method
    inner = new MyInner();

    // The Compiler has to create a synthetic method
    // to doSomething on MyInner object because this
    // method is private.
    // --> synthetic "doSomething" method
    inner.doSomething();
  }

  private class MyInner {
    // the inner class holds a syntetic ref_pointer to
    // the outer "parent" class
    // --> synthetic field
    private MyInner() {
    }
    private void doSomething() {
    }
  }
}
14
ответ дан 23 November 2019 в 23:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: