В конце концов, эта информация является «статической перед компиляцией». Почему бы его не скомпилировать в класс?
Хотя я понимаю преимущества динамических возможностей, такой подход, как Reflection API, применяет к экосистеме, и действительно гениальное предвидение в развитии объектно-ориентированного мышления и импульс того, что стало удивительно гибкой JVM...
Но. В духе Java -параметры версии 8 и недавняя реализация проблем в собственной компиляции Graal, связанных с использованием Reflection API, почему бы не предоставить базовую жестко закодированную (легковесную) возможность «отражения» в качестве встроенного этапа компиляции для НЕКОТОРЫХ* метаданных, которые не мешают этой гениальности*, которые следует сохранить.
*размышление о наследовании и динамическом духе JVM
*хвастовство в адрес гений, создавший людей, индустрию и экосистему.
Выгоды от сопоставления POJO/ORM будут огромными.
кстати, процессоры аннотаций МОГУТ есть, но это противоположно духу этого вопроса. Как бы то ни было, вопрос может быть в духе, противоположном гению, который создал то, что мы имеем сегодня. Но я не думаю, что эта тема должна быть приглушена здесь.
В любом случае,
- Хотим получить набор, определить подмножество и отфильтровать некоторые поля из множества всех (см. примеры)
- и вызывайте геттеры/сеттеры, хотя и неклассические, посредством перечисления для ссылки на имя/тип/модификаторы поля).
Выслушайте меня... хотя очевидно, что ICKY с разных точек зрения, с точки зрения ORM, существует примерно... 7 типов сеттеров нужен. Там, где ORM или http-params-to-Java составляет 80% кодовой базы, «теория против практики», более суровая реальность просто побеждает; Побеждает сегодня. и есть понимание того, почему он не побеждал в прошлом.
[*]любой < em>флаги компилятора, чтобы включить это? Плагины для javac?
[*]альтернативный javac? Я знаю, бууу.
[*]Это вообще не вопрос в свободном пространстве процессора аннотаций.
Практически, хотя я не являюсь «языковым существом» и знаю, что есть «причины»… но, как человек, просто работающий над какими-то высокоуровневыми отображениями ORM/http… не должен так ли это (добавлено около десяти лет назад)?
public class NiceClass {
//* NOTE this is not real java code today - don't copy and paste expecting it to work! */
static {
Set allMyFields = NiceClass.class.fieldz.public();
Set allMyLocalPublicFields = NiceClass.class.fieldz.local.public();
Set allMyLocalPrivateAndLocalProtectedFields = { Sets.union(
NiceClass.class.fieldz.local.private(),
NiceClass.class.fieldz.local.protected())}
Set specificFields = { Set.of(NiceClass.class.fields.ONE,
NiceClass.class.fields.THREE,
NiceClass.class.fields.FIVE )}
Set allFieldsWithoutLoggerByFieldName = {
NiceClass.class.fieldz.all().stream().filter(s-> s.name != "logger" ).collect(Collectors.toSet()) }
Set allFieldsWithoutLoggerByType = {
NiceClass.class.fieldz.all().stream().filter(s-> s.type != Logger.class ).collect(Collectors.toSet())
}
Set allNonTransientFields = {
NiceClass.class.fieldz.all().stream().filter(s-> s.modifier != Modifier.transient ).collect(Collectors.toSet())
}
Set holyGrailMySerialization = {
allFieldsWithoutLoggerByType.stream().filter(s-> s.access != private &&
! Modifiers.contains(Modifier.transient) &&
! Modifiers.contains(Modifier.volatile) &&
s.type != MyCredentials.class )
.collect(Collectors.toSet())
}
Set holyGrailMySerialization = {
holdGrailMySerialization.stream().filter(s-> ! s.annotations.contains(PrivateStuff.class) )
.collect(Collectors.toSet())
}
//and if you give the mouse a cookie...why shouldn't these be easy to "enable"?
public void set(Object.FieldInterface fieldEnum, Object value); //(casting in impl)
//and typesafe...
NiceClass.class.fieldz.stream().filter(
s->s.setterEnabled)
.map(s->s.type)
.collect(Collectors.toSet()).foreach(s->{
void set(fieldEnum, value);
}
})
//bonus to figure out how to reduce that param to what's *statically enabled*...
//I know this is wonky looking syntax ( a Set of types allowed in a generic? )
void set(Object.FieldInterface) fieldEnum, value);
//Anyways, the possibilties seem endless having this lightweight reflection...
}
Подробнее здесь: https://stackoverflow.com/questions/784 ... ompilation
Мобильная версия