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

    cast dinamico da un'interfaccia a un tipo base

    codice:
    public class Main {
    	
    	public void pippo(A a) {
    		System.out.println("PIPPO A");
    	}
    	
    	public void pippo(B b) {
    		System.out.println("PIPPO B");
    	}
    	
    	class A {}
    	
    	class B {}
    	
    	interface I {}
    
    	class C extends A implements I {}
    	
    	class D extends B implements I {}
    
    	public static void main(String[] args) {
    		Main m = new Main();
    		
    		I i = m.new C();
    		m.pippo(i);
    		
    		i = m.new D();
    		m.pippo(i);
    	}
    
    }
    La soluzione ovvia sarebbe
    codice:
    m.pippo((A) i);
    
    o
    
    m.pippo((B) i);
    ma vorrei rendere il cast automatico chiedendo a i qual è il suo tipo istanziato, quindi qualcosa del genere
    codice:
    m.pippo((i.getTipoIstanziato()) i);
    Qualche idea?

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

    Re: cast dinamico da un'interfaccia a un tipo base

    Originariamente inviato da redcloud
    [CODE]ma vorrei rendere il cast automatico chiedendo a i qual è il suo tipo istanziato, quindi qualcosa del genere
    codice:
    m.pippo((i.getTipoIstanziato()) i);
    codice:
    if (i instanceof A) {
        m.pippo((A) i);
    } else if (i instanceof B) {
        m.pippo((B) i);
    }
    Che pur funzionando tecnicamente ..... faticherei un pochino a capire il senso, il motivo e lo scopo finale per cui devi "romperti" la testa con robe del genere....

    Quando si fanno cose del tipo:

    InterfacciaXYZ i = new UnaClasseCheImplementaInterfacciaXYZ();

    lo scopo principale è quello di sfruttare il "polimorfismo" ovvero: non sai e non ti interessa quale è il tipo reale dell'oggetto ma sai che implementa InterfacciaXYZ e quindi invochi i metodi dell'oggetto in modo "polimorfico" attraverso la interfaccia.

    Quindi o in Main c'è un metodo pippo(I i) { ... } e qui dentro vengono invocati i metodi di I (quindi in modo polimorfico) oppure tutto quanto ha poco senso ... solo per "giocherellare"....
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Sono pienamente d'accordo con te riguardo all'uso delle interfacce. Il problema sorge quando hai una situazione del genere in cui sei OBBLIGATO ad usare quella specifica firma dei metodi. Si sarebbe potuto risolvere passando al metodo un oggetto di tipo interfaccia, ma purtroppo così non è. Quindi, piuttosto che scrivere una catena infinita di instanceof mi chiedevo se questo compito poteva essere assolto a runtime.

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.