Come avere zero o uno di e oggetto in una classe? [chiuso]

-3

Voglio una classe A, e voglio che la relazione A possa avere zero o una X.

Quindi ho scritto questa classe:

public class A {
    private X x = null;

    public A() {}
    public A(X x) { this.x = x; }

    public boolean hasX() { 
       if(x==null) 
          return false; 
       return true; 
    }
    public void setX(X x) { this.x = x; }
    public X getX() { return x; }
}

Ma ho la sensazione di avere qualcosa di sbagliato qui. Da quanto ho sentito, dovresti evitare di usare null come questo. Ma non sono sicuro di come farlo. È questo il modo corretto o consigliato per gestirlo?

    
posta Broman 26.11.2018 - 22:38
fonte

2 risposte

4

A partire da Java 8, questo è meglio gestito tramite Facoltativo digitare:

public class A {
    private Optional<X> x = Optional.empty();

    public A() {}
    public A(X x) { this.x = Optional.of(x); }

    public void setX(X x) { this.x = Optional.ofNullable(x); }
    public Optional<X> getX() { return x; }
}

L'uso di Optional.ofNullable(...) significa che il valore può essere "unset" (da svuotare).

    
risposta data 26.11.2018 - 23:08
fonte
3

In alternativa, ne hai sempre uno. Utilizza un oggetto Null.

es.

class NullX extends/implements X
{
    //implement with noops
}

Ora assegna sempre il valore a un oggetto. Questo ha il vantaggio di ovviare a qualsiasi null o ha un assegno. È una variabile, non è nulla, e può essere interagita senza sorpresa.

Ovviamente questo NullX deve implementare correttamente l'interfaccia e le aspettative. Ciò preclude alcune interfacce dall'avere un'implementazione nulla e può anche rendere possibili diverse implementazioni null.

    
risposta data 27.11.2018 - 01:41
fonte

Leggi altre domande sui tag