Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2014
    residenza
    Cantalupa (TO)
    Messaggi
    24

    Problema con Tipo Generico

    Sto cercando di creare una calcolatrice per allenarmi in vista dell'esame di prog2, ho studiato da poco i tipi generici ma ho sicuramente sbagliato qualcosa. Questo è il codice dell'oggetto che mi crea problemi:

    codice:
    public class Espressione<E> {
        private final char tipo; //tipo del carattere "n" per numero "o" per operazione "p" per parentesi
        private final E elemento; //Sarà o frazione(Frazione) o un operazione(char)
        private final int priorita; //priorità
    
    
        public Espressione(char type, String element, int priority) {
            if(type=='n') {
                elemento = new E(Integer.parseInt(element));
            }
            else if(type == 'o') {
                elemento = element.charAt(0);
            }
            else //se non è tra i caratteri permessi solleva eccezione
                throw new IllegalArgumentException("Mi aspettavo una parentesi o un operando\nErrore di Sistema\nErrore nel creare CharEsp con il primo costruttore");
            tipo=type;
            priorita = priority;
        }
    
    
        public E getElemento() {
            return elemento;
        }
    
    
        public char getTipo() {
            return tipo;
        }
    
    
    }
    Quando compilo mi segnala i seguenti 2 errori, sapreste dirmi come rimediare?

    C:\Users\Asus\Desktop\Documenti\Uni\MieiProgetti\E spressione.java:8: error: unexpected type
    elemento = new E(Integer.parseInt(element));
    ^
    required: class
    found: type parameter E
    where E is a type-variable:
    E extends Object declared in class Espressione
    C:\Users\Asus\Desktop\Documenti\Uni\MieiProgetti\E spressione.java:11: error: incompatible types
    elemento = element.charAt(0);
    ^
    required: E
    found: char
    where E is a type-variable:
    E extends Object declared in class Espressione
    2 errors


    Procedura completata con codice di uscita 1

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Ankarir Visualizza il messaggio
    codice:
    public class Espressione<E> {
                elemento = new E(Integer.parseInt(element));
    Non si può fare new E( ... ) perché E è solo una "type variable", in pratica un segnaposto. Il compilatore non sa come sarà parametrizzata una istanza di Espressione, quindi non può istanziare nulla relativo a E.

    A livello di bytecode, il E viene tradotto in Object:

    private final E elemento;

    diventa nel bytecode

    private final Object elemento;


    La tua idea e design non è corretta e penso non abbia nemmeno molto senso andare a tirare in ballo i generics per la gestione di una espressione. Consiglio: rivedi bene il tutto.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2014
    residenza
    Cantalupa (TO)
    Messaggi
    24
    Intanto grazie per la risposta
    Ho modificato la classe rinominandola e apportando alcune modifiche.
    A lavoro finito dovrei avere un oggetto Calcolatrice che contiene un array espressione di oggetti di tipo ElementoEspressione. Quest'ultima classe è la classe Espressione riscritta.
    Cosa ne pensate?

    codice:
    public class ElementoEspressione {
        private final Object elemento;
        private final char tipo; //tipo del carattere "n" per numero "o" per operazione
        private final int priorita; //priorità
    
    
        public ElementoEspressione(char type, String element, int priority) {
            if(type=='n') {
                elemento = new Frazione(Integer.parseInt(element));
            }
            else if(type == 'o') {
                elemento = element.charAt(0);
            }
            else //se non è tra i caratteri permessi solleva eccezione
                throw new IllegalArgumentException("Mi aspettavo un numero o un operando");
            tipo=type;
            priorita = priority;
        }
    
    
        public Object getElemento() {
            return elemento;
        }
    
    
        public char getTipo() {
            return tipo;
        }
    
    
    }
    Ultima modifica di Ankarir; 23-05-2014 a 22:07

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.