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?