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));
 }

}