Java's codegen is mostly done with standardized annotation processors, and they write code at build time so you can go look at the source they generated if you need to. And since it's generated at build time, everything is visible to the IDE.
There's a lot of reflection magic but it's not the wild west like Ruby can be because there's limits on what you can do to a class file once it's loaded. It's mostly limited to peeking at annotations on fields and methods and calling those methods or reading fields.
You can't redefine the methods or fields on an object at runtime, which prevents a lot of misguided insanity.
There's a lot of reflection magic but it's not the wild west like Ruby can be because there's limits on what you can do to a class file once it's loaded. It's mostly limited to peeking at annotations on fields and methods and calling those methods or reading fields.
You can't redefine the methods or fields on an object at runtime, which prevents a lot of misguided insanity.