On Thu, 18 Dec 2025 22:46:00 GMT, Roger Riggs <[email protected]> wrote:

>> ## Summary
>> 
>> Add explicit null check using `Objects.requireNonNull` in 
>> `DataOutputStream.writeBytes(String s)` to provide a clearer error message 
>> and make the API contract explicit.
>> 
>> ## Problem
>> 
>> The `writeBytes` method currently throws a `NullPointerException` when 
>> `null` is passed, but the error message may not be clear in all contexts. 
>> While JDK 14+ provides helpful NullPointerException messages through 
>> JEP 358 (Helpful NullPointerExceptions), adding an explicit null check 
>> using `Objects.requireNonNull` makes the API contract more explicit and 
>> provides consistent error messaging across different JDK versions.
>> 
>> ## Solution
>> 
>> Added `Objects.requireNonNull(s, "s")` at the beginning of the 
>> `writeBytes(String s)` method. This ensures:
>> - A clear error message ("s") is provided when null is passed
>> - The API contract explicitly states that null is not allowed
>> - The method fails fast with a descriptive exception
>> 
>> ## Issue
>> Fixes JDK-8373660
>> 
>> **JBS Issue Link**: 
>> https://bugs.java.com/bugdatabase/view_bug?bug_id=JDK-8373660
>> 
>> 
>> ## Type of Change
>> - [x] Test addition/modification
>> - [x] Bug fix
>> - [ ] New feature
>> - [ ] Documentation improvement
>> - [ ] Refactoring
>> 
>> ## Testing
>> 
>> A new JUnit test has been added to verify the null check behavior:
>> 
>> 
>> # Run the specific JUnit test file
>> make test 
>> TEST="jtreg:test/jdk/java/io/DataOutputStream/DataOutputStreamTest.java"
>> 
>> # Or run all tests in the DataOutputStream directory
>> make test TEST="jtreg:test/jdk/java/io/DataOutputStream"
>
> $0.02, The original exception message is complete and accurate without adding 
> extra bytecodes or an extra line of source.
> I don't think the addition is worthwhile.

@RogerRiggs Thank you for the review! 

I've reviewed the OpenJDK codebase and found that most code uses just the 
parameter name (e.g., `Objects.requireNonNull(out, "out")`), which is what I've 
used here. 
However, the Objects.java Javadoc examples use more descriptive messages like 
`"bar must not be null"`.

Using `Objects.requireNonNull` at the method entry point allows us to 
immediately identify the problematic parameter and makes the API contract 
explicit. By using a more descriptive message like `"s must not be null"`, we 
can provide a complete and accurate error message that clearly indicates which 
parameter is null and why it cannot be null, while still maintaining the 
benefits of fail-fast validation at method entry.

I'm open to changing it to a more descriptive message if that's the preferred 
approach. 
Would you like to share your opinion on this approach?
- `Objects.requireNonNull(s, "s must not be null")`

I'm happy to follow the project's conventions and your guidance on this.

Thank you for take time to review this.

-------------

PR Comment: https://git.openjdk.org/jdk/pull/28869#issuecomment-3672625364

Reply via email to