Some notes on Elvis and Other Null-Safe Operators
    Mark Mahieu 
    markmahieu at googlemail.com
       
    Wed Apr 15 23:40:43 PDT 2009
    
    
  
One more thought regarding Elvis and friends.  In the code-base I'm  
currently working on, I keep seeing code like the following:
	Map<Key, Set<Foo>> map = ...
	if (map != null) {
		Set<Foo> fooSet = map.get(key);
		if (fooSet != null) {
			for (Foo foo : fooSet) {
				...
			}
		}
	}
which can be 'simplified' in a number of ways, for example with the  
liberal sprinkling of a couple of null-transforming methods:
	Set<Foo> fooSet = emptyIfNull(map).get(key);
	for (Foo foo : emptyIfNull(fooSet)) {
		...
	}
Alternatively, with Elvis etc it could be written like this:
	for (Foo foo : map?.get(key) ?: Collections.<Foo>emptySet()) {
		...
	}
Which doesn't seem like much of an improvement, to me.  But I keep  
thinking that, in the context of this proposal, a null-safe form of  
the foreach loop might not be so bad:
	for (Foo foo :? map?.get(key)) {
		...
	}
I seem to recall that kind of example being talked about fairly  
extensively during JSR-201, but I think the discussion then was  
around whether foreach should be 'null-safe' by default.  Perhaps  
it's an example of trying to fit the proposal to the use-case, though.
Mark
    
    
More information about the coin-dev
mailing list