Perché non è possibile utilizzare la classe A nella classe generica di A

-2

Ho notato qualcosa di strano quando ho provato a utilizzare il metodo pubblico di classe A nella classe generica B di A, ma a quanto pare non ci riesco. Si tratta di restrizioni sui farmaci generici. Intendo dire impossibile creare istanze di tipo Parametri regola.

public class A{
    public void a(){System.out.println("Hello!");}
}

public class B<A>{
    public void b(A arg){arg.a();}
}
    
posta AJJack 23.04.2017 - 20:05
fonte

1 risposta

2

Quando scrivi:

public class B<A>{

stai creando A del nome del parametro generico. Ciò significa che all'interno B , A non si riferisce più alla tua classe A - può riferirsi a qualsiasi classe!

Ad esempio:

public class A{
    public void a(){System.out.println("Hello!");}
}

public class B<A>{
    public void b(A arg){/*arg.a();*/}
}

public class C{
}

// inside some function:
B<C> b = new B<C>();
C c = new C();
b.b(c);

Eseguo b.b(c); anche se c non è la tua classe A , perché dentro B<C>.b è un diverso A - il parametro generico - che è in realtà C perché stiamo usando B con C come parametro.

(in realtà, è solo Object con qualche magia del compilatore, ma cancellazione di tipi è oltre lo scopo di questa domanda)

    
risposta data 23.04.2017 - 20:21
fonte

Leggi altre domande sui tag