Perché la sintassi per la creazione di un nuovo oggetto è un po 'lunga in java? [duplicare]

-2
    

Questa domanda ha già una risposta qui:

    

Dopo aver provato a scrivere piccoli programmi senza leggere gran parte dei concetti in Java, la seguente sintassi mi infastidisce un po ': Car volvo = new Car("Sweden");

class Car {
  String country;

  // constructor which has no return value and is to construct an object (fill with data) while creating it with the arguments supplied
  Car(String theCountry) {
    country = theCountry;
  }

  // method to interact with the data in an object
  String display() {
    return country;
  }
}

Perché la sintassi non può essere semplice come volvo = new Car("Sweden")

Possibile spiegazione 1:

Possiamo fare una dichiarazione di tipo variabile, un tipo rigoroso ed è per questo che stiamo dichiarando rigorosamente il tipo di dati prima di iniziarlo.

Ad esempio, la seguente riga genera un errore: Bike apache = new Car("Apache");

Error:(54, 23) java: incompatible types: package1.Car cannot be converted to package1.Bike

Quindi potremmo evitare di specificare nuovamente il nome del costruttore, qualcosa come Car volvo = ????...!!!! new Car("Sweden") . Certo, non possiamo farlo !!

Eh !! Almeno, perché dobbiamo usare la parola chiave new qui? Ci sono altre parole chiave diverse da new ??

    
posta GP92 06.07.2016 - 13:25
fonte

2 risposte

2

La dichiarazione automatica delle variabili viene utilizzata in alcune lingue, ma non in altre. Generalmente, sono le lingue classificate come "statiche" (ad esempio C, Java, C #, C ++ e così via) che richiedono di dichiararle e (di solito) specificare il loro tipo. Questo perché questi linguaggi sono progettati per catturare gli errori del programmatore e indicarli al momento della compilazione, cosa che non può essere eseguita (nel caso di errori di battitura nei nomi delle variabili, ad esempio) se vengono dichiarate nuove variabili laddove non era previsto.

Java ha uno stile inutilmente dettagliato per dichiarare le variabili, comunque. Molti altri linguaggi (ad esempio C #, C ++, Go) hanno un modo rapido per dire al compilatore di scegliere automaticamente il tipo di variabile (ad esempio, scegli il tipo più specifico che si adatta all'espressione con cui lo stai dichiarando). Ad esempio, in C #, la tua riga sarebbe var volvo = new Car("Sweden"); - che potrebbe non essere più breve in questo caso, ma con un nome di tipo più lungo, e per lo meno evita la ripetizione. Mentre Java non ha una struttura come questa al momento, potrebbe averne uno in futuro, dato che è attivamente preso in considerazione per il prossimo versione di Java .

Go potrebbe avere l'approccio più interessante. La dichiarazione per il tuo esempio sarebbe volvo := Car{"Sweden"} , mentre per cambiare il valore di una variabile esistente useresti volvo = ... .

    
risposta data 06.07.2016 - 18:45
fonte
1

My own guess

Confronto:

Vehicle v;
if(condition){
    v = new Car();
}else{
    v = new Boat();
}

Se la tua sintassi funziona:

if(condition){
    v = new Car();
    // equivalent:
    Car v = new Car();
}else{
    v = new Boat();
    // equivalent:
    Boat v = new Boat();
}

// what is the type of 'v' here? Or, does it even exist?

Bene, se si dice che è possibile scegliere di dichiarare la variabile in un ambito diverso in anticipo, finirebbe come PHP, dove una riga di dichiarazione delle variabili è semplice come $var = value(); , indipendentemente dal fatto che $var sia il primo tempo dichiarato Un problema è che puoi ridichiarare facilmente le variabili. Puoi dichiarare una nuova variabile nell'ambito del blocco if, ma alla fine scrivi il valore della variabile nello scope superiore.

    
risposta data 06.07.2016 - 17:21
fonte

Leggi altre domande sui tag