PROPOSAL : Specify nullable argument

Reinier Zwitserloot reinier at zwitserloot.com
Tue Mar 17 19:58:06 PDT 2009


That sounds like great news. I'll do some more research.

  --Reinier Zwitserloot



On Mar 18, 2009, at 03:49, Jeremy Manson wrote:

> I don't know what the current state of the 305 proposal is, but Bill
> has been talking about at least three annotations in informal
> conversations.
>
> Jeremy
>
> On Tue, Mar 17, 2009 at 5:27 PM, Reinier Zwitserloot
> <reinier at zwitserloot.com> wrote:
>> Adding non-nullity to the type system would be a great boon, IMO, but
>> its far more complicated than just having a @NonNull annotation.
>>
>> I've written up a proposal a while ago here: http://www.zwitserloot.com/2008/10/23/non-null-in-static-languages/
>>
>> Suffice to say it gets very complicated because you need 4 nullity
>> states (Never-Allows-Null, Definitely-Allows-Null, Might-Allow-Null,
>> Legacy (like raw generics, for interop with old code), *AND* you need
>> a separate process to promote or demote generics (So that you can  
>> say:
>> Eventhough this is a Map that maps NonNull String to NonNull String,
>> if you call get() on this, you get a @Nullable String back, because
>> null will flow out if I can't find the key. In other words, the 'V'
>> generics parameter needs to be demoted to @Nullable V somehow).
>>
>> Read the blog entry for a more elaborate explanation with examples.
>>
>> I'd love something like that in java, but the proposal as it stands
>> needs a source 1.7; keyword (because having no modifier is taken as
>> 'never null', which is obviously not backwards compatible), and is
>> very complicated, so: Definitely not project coin material.
>>
>> Incidentally, I think jsr305 is fundamentally broken. It doesn't have
>> the states needed to convey nullity info; it needs at least 2
>> annotations, probably 3 to be able to differentiate between code that
>> simply didn't specify anything, and code that did, instead of the one
>> annotation that jsr305 gives.
>>
>>  --Reinier Zwitserloot
>>
>>
>>
>> On Mar 17, 2009, at 21:41, Neal Gafter wrote:
>>
>>> Did you intend this to be a complete proposal?
>>>
>>> Do you like this better than @NonNull, which will probably be  
>>> included
>>> in Java 7 under jsr 305?
>>>
>>> On Tue, Mar 17, 2009 at 1:25 PM, Olivier Chorier
>>> <lapsus63 at gmail.com> wrote:
>>>> Example :
>>>>
>>>> public void getListOfProducts(Company owner, !String  
>>>> facultativeName)
>>>> {
>>>> ....
>>>> }
>>>>
>>>> The '!' should prevent the developper that the argument is able to
>>>> be null.
>>>> Invoking getListOfProducts(null, "name") could throw a compilation
>>>> error/warning.
>>>>
>>>> Or maybe better :
>>>>
>>>> public void getListOfProducts(!Company owner, String  
>>>> facultativeName)
>>>> {
>>>> ....
>>>> }
>>>>
>>>> Here, the '!' indicates a mandatory argument (not null).
>>>>
>>>>
>>>> However, I don't know if the '!' marker could be the most
>>>> appropriate.
>>>>
>>>>
>>>
>>
>>
>>




More information about the coin-dev mailing list