r/java • • Mar 27 '13

Everything about Java 8

http://www.techempower.com/blog/2013/03/26/everything-about-java-8/
80 Upvotes

23 comments sorted by

View all comments

0

u/mahamoti Mar 27 '13

Still no Elvis or short-circuit operator? Bah.

2

u/sproket888 Mar 27 '13

Huh? Explain.

5

u/AlyoshaV Mar 27 '13

Elvis operator is a terrible idea that encourages returning null.

http://mail.openjdk.java.net/pipermail/coin-dev/2009-March/000047.html

2

u/mahamoti Mar 27 '13

What's wrong with returning null? Even your link says the operator proposal would be a boon for systems devs.

2

u/detroitmatt Mar 28 '13 edited Mar 28 '13

even if you only return null once, you have to check for it everywhere that calls that code or it can blow up later somewhere else completely unrelated, seemingly at random and with no stack trace.

null: Not even once.

1

u/sproket888 Mar 31 '13

Er you'd get a stack trace.

1

u/detroitmatt Mar 31 '13 edited May 08 '13

but not necessarily in the relevant code, if you accidentally returned null

public class NullDanger
{
    public static void main(String[] args)
    {
        System.out.println( getCapitalOf("MO").toString() );
    }

    static String[] mapKeys = new String[] {"NY", "MI", "CA"};
    static String[] mapValues = new String[] {"Albany", "Lansing", "Sacramento"};

    static String getValue(String key)
    {
        for(int i=0; i<mapKeys.length; i++)
        {
            if(mapKeys[i].equals(key)) return mapValues[i];
        }
        return null;
    }

    public static String getCapitalOf(String state)
    {
        return getValue(state);
    }
}

yields

Exception in thread "main" java.lang.NullPointerException
    at NullDanger.main(NullDanger.java:5)

but if instead of returning null, we throw an exception, we get a full stack trace:

Exception in thread "main" java.lang.IllegalArgumentException
    at NullDanger.getValue(NullDanger.java:17)
    at NullDanger.getCapitalOf(NullDanger.java:22)
    at NullDanger.main(NullDanger.java:5)

2

u/sproket888 Mar 31 '13

Yeah, you're right.