package espressioni;

public class EspressioneSingola extends EspressioneStringa {

// una espressione singola conteine solo una stringa

  private String str;

// costruttore; non e' necessario replicare l'oggetto dato
// che non e' modificabile

  public EspressioneSingola(String s) {
    if(null==s)
      throw new RuntimeException("Tentativo creazione EspressioneSingola con stringa nulla");

    this.str=s;
  }

// stessa cosa per il metodo get

  public String getStringa() {
    return str;
  }

// toString: qui possiamo essere sicuri che la variabile non
// sia null

  public String toString() {
    return str.toString();
  }

// equals: qui sfruttiamo: 1. il metodo stessaClasse
// ereditato; 2. il fatto che str non e' null; 3. il fatto
// che le stringhe hanno un metodo equals

  public boolean equals(Object o) {
    if(!this.stessaClasse(o))
      return false;

    EspressioneSingola v=(EspressioneSingola) o;

    return this.str.equals(v.str);
  }

// se si ridefinisce equals va ridefinito anche hashCode

  public int hashCode() {
    return this.str.hashCode();
  }

// clone non e' necessario: dato che le stringhe non sono
// clonabili, basta la clonazione superficiale; questa e'
// gia' ereditata dalla sovraclasse
}

// notare che questa classe e' molto simile a
// EspressioneVariabile (una sola componente stringa e tutti
// metodi standard); sono pero' necessarie tutte e due
// perche' una e' sottoclasse di EspressioneIntera e l'altra
// di EspressioneStringa

