Можно ли удалить свойство из объекта Java во время выполнения? - PullRequest
0 голосов
/ 31 мая 2019

У меня есть pojo с аннотациями jpa. Одно из строковых свойств помечено как не обнуляемое. Есть некоторый код, который устанавливает значение, если оно не установлено. В некоторых случаях этот код должен быть запущен, но если установить значение в пустую строку, он обрабатывается как значение и не запускается. Я не могу установить ненулевое значение равным нулю, и поэтому я не могу отредактировать объект, чтобы вызвать код обычным способом.

Честно говоря, этот фрагмент кода в любом случае нуждается в рефакторинге, и у меня действительно есть обходной путь, но я уверен, что я видел способ «удалить» peroperty где-то раньше (возможно, отражение?)

Итак, класс выглядит примерно так ...

@Entity
@Table(name="Example")
@SequenceGenerator(name = "seq1", sequenceName = "seq1")
public class Example implements Serializable {

    @Column(name="name", nullable=true, length = 100)
    private java.lang.String name;

    @Column(name="id", nullable=false)      @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="SEQ1_Type_SEQ")
    @Id
    private long oID;

    @Column(name="extraval", nullable=false, length = 100)
    private java.lang.String entityVersion;4

...

И extraVal устанавливается различными ограничениями jpa / db, если он не установлен в pojo. Иногда я хотел бы вызвать это, даже если оно уже установлено, но установка значения в пустую строку устанавливает его в значение, а установка в ноль вызывает ошибку.

Я на самом деле могу смоделировать значение заранее и надеюсь в какой-то момент провести рефакторинг кода, чтобы я мог выполнить все свои проверки перед тем, как создать объект в первую очередь, чтобы не пытаться копировать / воссоздавать объект и т. д. Как я уже сказал, я уверен, что есть элегантный способ удалить свойство как краткосрочное решение?

1 Ответ

0 голосов
/ 31 мая 2019

Я просто уверен, что есть элегантный способ удалить свойство как краткосрочное решение?

Нет.Невозможно изменить класс с помощью отражения.

Теоретически возможно изменить скомпилированный класс до или во время его загрузки.Однако есть вероятность, что процессор аннотаций для вашей платформы JPA уже делает это.Поэтому я не думаю, что это будет практично.(Не говоря уж о желании!)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...