Luigit
repositories / dotfiles

dotfiles

bugabingas dorkfiles

owned by admin

pi/agent/skills/optional/java/java-final-field-mutation/SKILL.md

Raw
Rendered preview

name: java-final-field-mutation description: "Use when Java 26+ code mutates final fields with deep reflection, serialization frameworks, JNI, or Unsafe." license: CC-BY-4.0-summary compatibility: "JDK 26+" metadata: sources: - "https://openjdk.org/jeps/500"

Prepare to Make Final Mean Final

Use for Prepare to Make Final Mean Final work from JEP 500 when targeting JDK 26+.

When active

  • Find Field.setAccessible(true) plus Field.set(...) on final fields.
  • Prefer constructors, factories, builders, records, or supported serialization paths.
  • Use --illegal-final-field-mutation=debug|deny to locate and harden offenders.

Pitfalls

  • --add-opens alone does not enable final-field mutation.
  • Warnings are per mutating module by default.
  • Startup opt-in belongs to the application owner, not a hidden library requirement.

Examples

Read examples/jep-500.md for JEP-derived snippets.

References

---
name: java-final-field-mutation
description: "Use when Java 26+ code mutates `final` fields with deep reflection, serialization frameworks, JNI, or Unsafe."
license: CC-BY-4.0-summary
compatibility: "JDK 26+"
metadata:
  sources:
    - "https://openjdk.org/jeps/500"
---

# Prepare to Make Final Mean Final

Use for **Prepare to Make Final Mean Final** work from [JEP 500](https://openjdk.org/jeps/500) when targeting JDK 26+.

## When active

- Find `Field.setAccessible(true)` plus `Field.set(...)` on final fields.
- Prefer constructors, factories, builders, records, or supported serialization paths.
- Use `--illegal-final-field-mutation=debug|deny` to locate and harden offenders.

## Pitfalls

- `--add-opens` alone does not enable final-field mutation.
- Warnings are per mutating module by default.
- Startup opt-in belongs to the application owner, not a hidden library requirement.

## Examples

Read `examples/jep-500.md` for JEP-derived snippets.

## References

- https://openjdk.org/jeps/500