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