2016-06-23 20 views
5

Non capisco perché sto ricevendo un avviso con il seguente codice:Perché ricevo un avviso non controllato?

public static boolean isAssignableFrom(Class clazz, Object o) { 
    return clazz.isAssignableFrom(o.getClass()); 
} 

chiamata non controllato a isAssignableFrom(Class<?>) come membro di tipo grezzo java.lang.Class

Quando uso il isInstance metodo invece (che fornisce risultati identici da quello che ho capito), non ricevo un avviso:

public static boolean isAssignableFrom(Class clazz, Object o) { 
    return clazz.isInstance(o); 
} 

risposta

2

Perché Class è un tipo generico e non si sta dicendo a Java che Object deve essere un'istanza della classe. Cambiare

public static boolean isAssignableFrom(Class clazz, Object o) 

a qualcosa di simile

public static <C> boolean isAssignableFrom(Class<C> clazz, C o) 
+0

Grazie! La risposta lo ha chiarito. Ma penso che sarebbe meglio lasciare il 'Object o' in posto invece di usare un parametro di tipo lì per essere in grado di controllare con qualsiasi oggetto in fase di esecuzione, non è vero? – Revolutionair

+0

Non proprio, dopo la cancellazione del tipo il codice è lo stesso in fase di esecuzione (beh, c'è un cast implicito nel mio esempio). –

+0

Diciamo che ho 3 classi: 'Parent',' Child extends Parent', 'RandomClass'. Con il parametro type potrei controllare se Child è assegnabile da Parent ma non sarei in grado di farlo per RandomClass ('isAssignableFrom (Parent.class, new RandomClass());') – Revolutionair

Problemi correlati