Comparing objects with literals in java
This tiny tip shows how to compare objects with literals and constants without risking a NullPointerException (NPE).
Use <Literal>.equals(<Object>) instead of <Object>.equals(<Literal>)
An Example:
package demo; import java.awt.Dimension; import javax.swing.JFrame; import javax.swing.SwingUtilities; import javax.swing.UIManager; import javax.swing.UIManager.LookAndFeelInfo; public class Tip0010example1 { public static void main(String[] args) { SwingUtilities.invokeLater(() -> setup()); } private static void setup() { setupLookAndFeel(); JFrame mainFrame = createMainFrame(); mainFrame.setVisible(true); } private static void setupLookAndFeel() { try { for(LookAndFeelInfo laf : UIManager.getInstalledLookAndFeels()) { //NOT if(laf.getName().equals("Nimbus")) { if("Nimbus".equals(laf.getName())) { UIManager.setLookAndFeel(laf.getClassName()); } } } catch(Exception ex) { ex.printStackTrace(); System.exit(1); } } private static JFrame createMainFrame() { JFrame mainFrame = new JFrame("demo"); mainFrame.setPreferredSize(new Dimension(400, 400)); mainFrame.setLocationRelativeTo(null); mainFrame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE); return mainFrame; } }
In practise this does not matter, if no one has installed a LookAndFeel without a name.
A second example:
package demo; import java.util.Arrays; import java.util.List; public class Tip0010example2 { private static enum Gender { female, male, divers; } private static class Person { String name; Gender gender; public Person(String name, Gender gender) { this.name = name; this.gender = gender; } } public static void main(String[] args) { List<Person> persons = Arrays.asList( new Person("Max", Gender.male), new Person("Sarah", Gender.female), new Person("Renè", null)); // print all women's names: persons.stream() .filter(p -> Gender.female.equals(p.gender)) .forEach(p -> System.out.println(p.name)); } }