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

    [JAVA] Creare oggetto mediante reflection

    Non ho problemi, finora, nel creare e manipolareun oggetto di classe Class al fine di ottenere i suoi metodi e i suoi campi, privati o non.

    Il problema sta quando provo a creare mediante la reflection un oggetto il cui costruttore contenga parametri.

    So che va utilizzata la classe Constructor, ma mi viene segnalato un Exception di tipo java.lang.NoSuchMethodException.

    Vi posto il codice:

    Constructor <Persona> costruttore = istanza.getConstructor(new Class[]{String.class, String.class, Integer.class});
    Persona persona = (Persona)costruttore.newInstance(new Object[] {new String ("Adriano"), new String ("Cristini"), new Integer (20)});
    persona.getCognome();
    Il costruttore della classe Persona contiene 3 parametri di tipo String - String - int.

    Eppure mi dà questo errore.

    Dov'è che sbaglio oppure qual'è il modo per creare un'istanza di una classe fornendo i parametri descritti nel costruttore?

  2. #2
    non vorrei dire una stupidaggine ma cosi tu non passi (String - String -Int)
    ma passi (object[]) quindi servirebbe un costruttore che preveda nella firma un arrey di tipo Object...

  3. #3
    Prova a farla più semplice....

    Persona persona = (Persona)costruttore.newInstance(new String ("Adriano"), new String ("Cristini"), new Integer (20));

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: [JAVA] Creare oggetto mediante reflection

    Originariamente inviato da ragnonerodocet
    Il costruttore della classe Persona contiene 3 parametri di tipo String - String - int.
    Allora per cercare il costruttore devi passare int.class e quando lo invochi devi passare un Integer (chiaramente ... visto che newInstance() riceve un array di Object!).

    Purtroppo esiste questa "discrepanza" (ben nota!) per i tipi primitivi tra la ricerca di un costruttore/metodo e la sua invocazione.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Ok, perfetto, non sapevo che al metodo getConstructor potessi passare la classe int, ma in effetti sono un cretino perchè passo CLASSI, e dunque la classe int è diversa dalla classe Integer.

    Comunque l'infame continua a darmi errore, più precisamente un

    java.lang.InstantiationException

    sulla riga che posto in grassetto.

    Class c = Persona.class;
    Constructor <Persona> costruttore = c.getConstructor(new Class[] {String.class, String.class, int.class});
    Persona persona = costruttore.newInstance(new Object[] {new String ("Adriano"), new String ("Cristini"), new Integer (20)}) ;
    Cosa sbaglio di così grossolano?

  6. #6
    Ho fatto anche il cast sulla linea in grassetto in modo da restituire una "Persona, così:

    Persona persona = (Persona)costruttore.newInstance(new Object[] {new String ("Adriano"), new String ("Cristini"), new Integer (20)});

  7. #7
    Ho capito tutto...

    Cercavo di istanziare un istanza di classe astratta...

    Non credevo di essere tanto cretino...

    Scusate tutti per il disturbo...

    Si può finalmente chiudere.

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da ragnonerodocet
    Cercavo di istanziare un istanza di classe astratta...
    Infatti ... lo dice anche la documentazione di InstantiationException:

    the class object represents an abstract class, an interface, an array class, a primitive type, or void
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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.