Si doSomething
est surchargée, vous devez lancer le nul explicitement MyClass
si la surcharge de droite est choisi:
public void doSomething(MyClass c) {
// ...
}
public void doSomething(MyOtherClass c) {
// ...
}
Une situation non artificielle où vous devez jeter est lorsque vous appelez une fonction varargs:
class Example {
static void test(String code, String... s) {
System.out.println("code: " + code);
if(s == null) {
System.out.println("array is null");
return;
}
for(String str: s) {
if(str != null) {
System.out.println(str);
} else {
System.out.println("element is null");
}
}
System.out.println("---");
}
public static void main(String... args) {
/* the array will contain two elements */
test("numbers", "one", "two");
/* the array will contain zero elements */
test("nothing");
/* the array will be null in test */
test("null-array", (String[])null);
/* first argument of the array is null */
test("one-null-element", (String)null);
/* will produce a warning. passes a null array */
test("warning", null);
}
}
la dernière ligne produira l'avertissement suivant:
Exemple.java:26: avertissement: non-varargs méthode d'appel de varargs avec inexact type d'argument pour le dernier paramètre;
coulé à java.lang.String
pour un varargs appel
casting à java.lang.String[]
pour une non-varargs appel et de supprimer ce avertissement
Peut-être juste un codeur inexpérimenté? Ou quelqu'un qui a changé le code de doSomething ((cast) quelque chose); et voulait le changer en null, et ne prenait pas la peine d'enlever la distribution? Est-ce à plus d'un endroit ou juste un exemple? –
Je ne me souviens pas où je l'ai lu, mais j'ai vu cela et j'ai appris que vous pouvez lancer un null sur un objet. Le problème est, je ne peux pas trouver un scénario raisonnable! : P – pek
Copie possible de [Pourquoi cast null à l'objet?] (Http://stackoverflow.com/questions/5806163/why-cast-null-to-object) – Archmede