Earlier quoted context omitted.
>Certainly no less expressive than, say, Python or JavaScript. Java can't even have a free standing function without 6 lines of boilerplate minimum and 2 levels of indentation to start. Nominal static typing with weak generics and no almost no compile time programming support - you end up mucking with reflection or code generation if you want to do anything metaprogramming related or non trivial higher order function…
Java 8 has been there for 7 years now. You can have a free-standing function in a single one-liner expression. Function fn = parameter -> parameter + " from lambda"; Using annotations and cglib, you can do all the meta-programming you want.
Annotations and CGLib -> reflection nonsense and boilerplate - if you tried that and compare it to something like a dynamic language with open types (eg. JS/TS) you are just being dishonest if you're saying the two are anywhere close to comparable.
I remember doing a node ORM extension where I just injected standard revision management primitives into the entity as a part of repository. That would take an insane ammount of work in Java in comparison to get the same API functionality (namely it was mostly transaparent to the consumer)