Incident Report 9079511: Java Language Enhancement: Disallow access to static members via object references
Ethan McCue
ethan at mccue.dev
Fri Jan 23 15:30:00 UTC 2026
https://github.com/kzn/colt/blob/master/src%2Fcern%2Fcolt%2Fmatrix%2Flinalg%2FSeqBlas.java#L33
.
Missed a link on that last one
On Fri, Jan 23, 2026, 10:29 AM Ethan McCue <ethan at mccue.dev> wrote:
> To add a concrete example, here is a Java collections library written by
> CERN
>
> https://github.com/kzn/colt
>
> They make instances of classes specifically to allow static methods to
> create aliases
>
>
> https://github.com/kzn/colt/blob/master/src%2Fhep%2Faida%2Fbin%2FBinFunctions1D.java#L12
>
> And this is done liberally throughout the library, as well as code which
> uses the library (which is reasonable to assume given that it was an
> intended usage pattern)
>
> private static final cern.jet.math.Functions F =
> cern.jet.math.Functions.functions;
>
>
>
>
>
> On Fri, Jan 23, 2026, 10:12 AM Red IO <redio.development at gmail.com> wrote:
>
>> I understand your idea. But I think that's exactly what the warning is
>> for. It suggests people to not access static data through objects. Making
>> it an hard error would likely break many code bases requiring massive
>> migrations without any real benefits.
>>
>> Treating warnings as errors and annotating necessary warnings with
>> suppress warnings and a comment should be best practice anyway.
>>
>> Great regards
>> RedIODev
>>
>> On Fri, Jan 23, 2026, 13:42 Amazing Code <amazingcodewithus at gmail.com>
>> wrote:
>>
>>> I am writing to propose a language enhancement regarding the handling of
>>> static member access in Java.
>>> *Issue*
>>>
>>> Java currently permits static fields and methods to be accessed through
>>> object references, despite static members belonging strictly to the class.
>>> This behavior is often misleading and can create confusion, especially in
>>> large codebases or among less-experienced developers.
>>>
>>> Example:
>>>
>>> MyClass obj = new MyClass();
>>> obj.staticMethod(); // Currently allowed, but confusing
>>>
>>> *Proposed Enhancement*
>>>
>>> I request consideration of a change that *disallows access to static
>>> members via object references*, enforcing access exclusively through
>>> the class name. This would convert the current warning into a *compile-time
>>> error*.
>>> *Rationale*
>>>
>>> -
>>>
>>> Prevents misconceptions about instance vs. class-level behavior
>>> -
>>>
>>> Improves code clarity and consistency
>>> -
>>>
>>> Reduces maintenance complexity in enterprise applications
>>> -
>>>
>>> Encourages best practices already recommended by the community
>>>
>>> *Suggested Requirements*
>>>
>>> 1.
>>>
>>> Compiler should produce an error when static members are accessed
>>> through object references.
>>> 2.
>>>
>>> Error messages should explicitly guide developers to use class-based
>>> access.
>>> 3.
>>>
>>> Rules should apply to static fields, static methods, and static
>>> nested types.
>>> 4.
>>>
>>> Optionally, provide a compiler flag for backward compatibility
>>> during migration.
>>>
>>> *Conclusion*
>>>
>>> Restricting object-based access to static members would strengthen
>>> language clarity and help eliminate a common source of misunderstanding. I
>>> kindly request your consideration of this enhancement for future Java
>>> releases.
>>>
>>> Thank you for your time and continued work on the Java platform.
>>>
>>> Sincerely,
>>> *Kamlesh Kohli*
>>>
>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.org/pipermail/amber-dev/attachments/20260123/fd26933f/attachment-0001.htm>
More information about the amber-dev
mailing list