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

    Generics & reflection

    Ciao a tutti,
    vorrei iniziare ad usare i generics, ma ho bisogno di un consiglio per utilizzarle insieme alla reflection.

    In un metodo ricevo un parametro Object in cui si può trovare un tipo di utente: cliente, impiegato, tcc. tutti figli di una classe Usr.

    Inizialmente devo solo fare dei controlli su delle proprietà della classe Usr presenti in tutti i figli.
    Scrivo questo

    Class<Usr> user = obj.getClass().getSuperclass(); // mi ritorna errore
    if(user.getUsername() == null) throw new UsernameException();

    Cosa devo scrivere?

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

    Re: Generics & reflection

    Originariamente inviato da Sandrocchio_0.1
    Ciao a tutti,
    vorrei iniziare ad usare i generics, ma ho bisogno di un consiglio per utilizzarle insieme alla reflection.

    In un metodo ricevo un parametro Object in cui si può trovare un tipo di utente: cliente, impiegato, tcc. tutti figli di una classe Usr.

    Inizialmente devo solo fare dei controlli su delle proprietà della classe Usr presenti in tutti i figli.
    Scrivo questo

    Class<Usr> user = obj.getClass().getSuperclass(); // mi ritorna errore
    if(user.getUsername() == null) throw new UsernameException();

    Cosa devo scrivere?
    Per un momento lascia perdere la reflection. Vediamo invece il polimorfismo. Se sai già che il metodo riceverà un oggetto che è sempre un sotto-tipo di Usr, non puoi dichiarare il parametro di tipo Usr???
    Se non puoi dichiarare il parametro di tipo Usr, usa l'operatore instanceof per determinare se l'oggetto è di tipo Usr (e poi magari un altro test del genere per sapere se è un tipo più specifico, dipende da cosa devi fare).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  3. #3
    ok, ho messo da parte la reflection perchè in effetti hai ragione, i metodi sono eriditati dal padre e quindi presente anche nel figlio, sono quindi sicuro che ci siano.

    allora, il metodo del mio stateless bean inizia così

    public boolean addUsr(Usr user, boolean confirmationEmail) throws ....

    e il mio client lo chiama nel seguente modo:
    Contractor consultant = null; (extends Usr)
    consultant = new Contractor(username, password, email);


    UsrAddress address = new UsrAddress();
    address.setFirstName(firstName);
    address.setLastName(lastName);

    //attaching the single address to the Contractor instance
    consultant.getAddressList().add(address);
    Boolean success = new Boolean(facadeBean.addUsr(consultant, false));
    mi becco però un java.lang.NoSuchMethodError nell'ultima riga che vedi quì sopra.
    Il metodo esiste, ho fatto una prova sostituendo il parametro Usr con Contractor e funziona.
    Qual'è il problema??

    ps. il facade bean è uno stateless con interfacce

  4. #4
    mi corrego
    l'errore è il seguente
    Exception in thread "main" java.lang.NoSuchMethodError: com.xxxxx.xxxxx.UsrSessionRemote.addUsr(Lxx/xxxxxxx/xxxxxx/xxxxx/Contractor;Z)Z
    at usersModuleClient.Main.main(Main.java:189)
    Java Result: 1
    a me pare che l'interfaccia si aspetti un parametro Usr, come posso far passare anche i figli?

  5. #5
    ok, credo di aver risolto, ma vorrei avere qualche feedback

    Usr user = new Contractor(ecc. ecc,)

    in fatto di performance è accetabile come utilizzo?

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 © 2024 vBulletin Solutions, Inc. All rights reserved.