menuButton Menü

Objekte mit Literalen vergleichen

Dieser kleine Tipp soll Ihnen zeigen, wie man Literale und Konstanten mit Java-Objekten vergleichen kann, ohne eine NullPointerException (NPE) zu riskieren.

Verwenden Sie <Literal>.equals(<Object>) statt <Object>.equals(<Literal>)

Ein Beispiel:

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 SwingApp {

 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 der Praxis ist das für diesen Fall unbedeutend; es sei denn, jemand hat ein LookAndFeel ohne Namen installiert.

Ein zweites Beispiel:

package demo;

import java.util.Arrays;
import java.util.List;

public class TJBD0010example2 {

 private static enum Gender {
  female,
  male,
  divers;
 }

 private static class Person {
  String name;
  Gender gender;

  public Person(String name, Gender gender) {
   super();
   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));
 }

}