Ho il seguente esempio:Calling base e metodi statici derivati di un tipo di variabile
class Ideone
{
public static void main (String[] args) throws java.lang.Exception
{
A<ConcreteErrorHandler> a = new A<ConcreteErrorHandler>();
a.m(); //Exception here!
}
public static class AbstractErrorHandler {
public static void handle(){
throw new UnsupportedOperationException("Not implemented");
}
}
public static class ConcreteErrorHandler extends AbstractErrorHandler{
public static void handle(){
System.out.println("Concrete handler");
}
}
public static class A<T extends AbstractErrorHandler>{
public void m(){
T.handle();
}
}
}
Perché il metodo della classe di base è chiamato, ma non del derivato? Le firme dei metodi handle()
sono perfettamente uguali. So che i metodi statici non ereditano, ma non dovrebbe essere generato un errore in fase di compilazione nel mio caso?
Qualcuno potrebbe spiegare questo comportamento?
Ma ho fornito il tipo esatto al momento della compilazione. 'A a = new A ();' Il tipo noto al momento della compilazione. –
Hai fornito il tipo fuori dall'ambito del metodo 'm'. – MadConan
@ St.Antario I generici Java non sono modelli come in C++. La dichiarazione di classe non conosce la parametrizzazione che gli dai da qualche altra parte. – Radiodef