Например, Когда у Вас есть оператор переключения, Java создает переменную, которая запускается с $. Если Вы хотите видеть пример этого, быстрого взгляда в отражение Java класса, который имеет оператор переключения в нем. Вы будете видеть эти переменные, когда у Вас будет по крайней мере один оператор переключения где угодно в классе.
Для ответа на вопрос я не полагаю, что Вы можете получить доступ (кроме отражения) к синтетическим классам.
при анализе класса, что Вы ничего не знаете о (через отражение) и должны знать очень определенные и вещи низкого уровня о том классе, можно закончить тем, что использовали методы отражения Java, которые имеют отношение к синтетическим классам. Единственное "использование" здесь, получают больше информации о классе для использования его соответственно в коде.
(При выполнении этого Вы, вероятно, создаете платформу некоторых видов, которые могли использовать другие разработчики.)
Иначе, если Вы не используете отражение, нет никаких практических применений синтетических классов, о которых я знаю.
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 те, которые В спящем режиме.
Хорошо я нашел ответ на первый вопрос на Google:
класс А может быть отмечен как синтетический продукт, если он сгенерирован компилятором, то есть, это не появляется в исходном коде.
Это - просто основное определение, но я нашел, что оно на форуме распараллеливает и не было никакого объяснения. Все еще ища лучший...
Также Синтетические Классы или Динамические Прокси используются EasyMock для создания реализаций интерфейсов или абстрактных классов во времени выполнения.
Согласно это обсуждение , хотя спецификация языка описывает "isSynthetic" proprty для классов, это в значительной степени игнорируется реализациями и не используется или для динамических прокси или для анонимных классов. Синтетические поля и конструкторы используются для реализации вложенных классов (нет понятия вложенных классов в коде байта, только в исходном коде).
я думаю, что понятие синтетических классов, просто оказалось, было не полезно, т.е. никто не заботится, является ли класс синтетическим продуктом. С полями и методами, это, вероятно, используется точно в одном месте: для определения, что показать в представлении структуры класса IDE - Вы хотите нормальные методы, и поля для разоблачения там, но не синтетические раньше моделировали вложенные классы. OTOH, Вы ДЕЙСТВИТЕЛЬНО хотите, чтобы анонимные классы обнаружились там.
, Что такое синтетический класс в Java?
А synthetic
класс .class
файл, сгенерированный [1 112] Компилятор Java , и он не существует в исходном коде.
использование В качестве примера synthetic
класс: Анонимный внутренний класс
synthetic
класс, и это - анонимный внутренний класс в java.text. DigitListDigitList$1.java
, но это - внутренний файл в DigitList.java
, Почему это должно использоваться?
Это - механизм в логике компилятора Java для генерации .class
файл
, Как я могу использовать его?
нет, разработчики делают НЕ использование это непосредственно.
использование компилятора Java synthetic
для генерации .class
файл, и затем JVM читает .class
файл для выполнения логики программы.
синтетические классы / методы / поля:
Эти вещи важны для виртуальной машины. Взгляните на следующий фрагмент кода:
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() {
}
}
}