Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    Errore in compilazione error: cannot find symbol

    Ragazzi sto seguendo un corso online di JAVA e nel pdf mette come esempio:
    codice:
    class verificaoggetto{
          public static void main(String[] args) {
    
    Cane dog = new Cane(); // istanzio un oggetto di tipo Cane
    Gatto cat = new Gatto(); // istanzio un oggetto di tipo Gatto
    
    System.out.println("dog è un cane: " + (dog instanceof Cane));
    System.out.println("dog è un gatto: " + (dog instanceof Gatto));
    System.out.println("cat è un cane: " + (cat instanceof Cane));
    System.out.println("cat è un gatto: " + (cat instanceof Gatto));      	     
    }
    }
    Quando provo a compilare il file ho il seguente errore:

    codice:
    javac verificaoggetto.java 
    verificaoggetto.java:4: error: cannot find symbol
    Cane dog = new Cane(); // istanzio un oggetto di tipo Cane
    ^
      symbol:   class Cane
      location: class verificaoggetto
    verificaoggetto.java:4: error: cannot find symbol
    Cane dog = new Cane(); // istanzio un oggetto di tipo Cane
                   ^
      symbol:   class Cane
      location: class verificaoggetto
    verificaoggetto.java:5: error: cannot find symbol
    Gatto cat = new Gatto(); // istanzio un oggetto di tipo Gatto
    ^
      symbol:   class Gatto
      location: class verificaoggetto
    verificaoggetto.java:5: error: cannot find symbol
    Gatto cat = new Gatto(); // istanzio un oggetto di tipo Gatto
                    ^
      symbol:   class Gatto
      location: class verificaoggetto
    verificaoggetto.java:7: error: cannot find symbol
    System.out.println("dog è un cane: " + (dog instanceof Cane));
                                                           ^
      symbol:   class Cane
      location: class verificaoggetto
    verificaoggetto.java:8: error: cannot find symbol
    System.out.println("dog è un gatto: " + (dog instanceof Gatto));
                                                            ^
      symbol:   class Gatto
      location: class verificaoggetto
    verificaoggetto.java:9: error: cannot find symbol
    System.out.println("cat è un cane: " + (cat instanceof Cane));
                                                           ^
      symbol:   class Cane
      location: class verificaoggetto
    verificaoggetto.java:10: error: cannot find symbol
    System.out.println("cat è un gatto: " + (cat instanceof Gatto));             
                                                            ^
      symbol:   class Gatto
      location: class verificaoggetto
    8 errors
    Sto utilizzando java7 di oracle ma avevo provato anche java6. Come sistema operativo utilizzo Kubuntu 12.04. Potreste gentilmente aiutarmi a risolvere il problema?
    Grazie

  2. #2
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    ti consiglio vivamente di partire con una buona guida/libro. E dalla copertina.

    Cane e Gatto che roba sono? Suppongo oggetti (ovvero classi) da te definiti. Dove sono piazzati quando provi a compilare? Raggiungibili nel classpath?
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  3. #3
    Nell'esempio non definisce le classi Cane e Gatto.
    Se definisco due classi vuote del tipo:
    class Cane {
    public Cane()
    }

    e

    class Gatto {
    public Gatto ()
    }

    mi da errore:


    javac verificaoggetto.java
    verificaoggetto.java:16: error: inconvertible types
    System.out.println("dog è un gatto: " + (dog instanceof Gatto));
    ^
    required: Gatto
    found: Cane
    verificaoggetto.java:17: error: inconvertible types
    System.out.println("cat è un cane: " + (cat instanceof Cane));
    ^
    required: Cane
    found: Gatto
    2 errors

  4. #4
    L'esempio riguarda l'utilizzo di instanceof.

  5. #5
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,326
    Premesso che c'è un bug aperto su qualcosa di simile... il messaggio d'errore del compilatore è comunque corretto. Evidentemente il compilatore è in grado di stabilire fin da subito che c'è un errore nel codice.

    L'operatore instanceof restituisce true se e solo se l'oggetto a sinistra è istanza della classe a destra. Questo significa che l'operazione di cast è fattibile senza alcun errore.

    Nel tuo caso, il compilatore è in grado di stabilire immediatamente che tale cast non sarà mai possibile (essendo, Gatto e Cane due classi assolutamente distinte, senza alcun legame). Ciò significa che un oggetto dichiarato di tipo Cane non sarà mai convertibile in un tipo Gatto e viceversa.

    Cosa diversa per quanto riguarda oggetti che possono avere parentele. Esempio:

    codice:
    Number num = getNumber();   // Ottengo un oggetto di tipo Number
    
    if (num instanceof Integer) {
       // Integer è figlia di Number
    }
    
    if (num instanceof Double) {
       // Double è figlia di Number
    }
    E' chiaro che un oggetto Double non sarà mai convertibile in un oggetto Integer... ma la variabile "num" è di tipo Number, più generale. E sia Integer che Double sono entrambi dei Number.

    Ci si aspetterebbe che la compilazione vada a buon fine lo stesso nel tuo caso e che solo in esecuzione vi sia l'effettiva restituzione di un "false"... ma evidentemente qui il lavoro riesce a farlo già il compilatore al posto tuo (il che, in questo caso, è un bene perchè ti evita di scrivere codice effettivamente errato o inutile). Diverso è il caso del bug segnalato nell'ambito dei generics... ma stiamo parlando di una cosa diversa.

    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.