Quand et pourquoi quelqu'un ferait ce qui suit :
doSomething( (MyClass) null );
Avez-vous déjà fait ça ? Pouvez-vous partager votre expérience ?
Quand et pourquoi quelqu'un ferait ce qui suit :
doSomething( (MyClass) null );
Avez-vous déjà fait ça ? Pouvez-vous partager votre expérience ?
Si doSomething
est surchargé, vous devez convertir explicitement le null en MyClass
afin de choisir la bonne surcharge :
public void doSomething(MyClass c) {
// ...
}
public void doSomething(MyOtherClass c) {
// ...
}
Une situation non-contrariée où vous devez effectuer un casting 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 :
Example.java:26 : avertissement : appel de la méthode non-varargs appel de la méthode varargs avec un type type d'argument inexact pour le dernier paramètre ;
pourjava.lang.String
pour une varargue appeler
pourjava.lang.String[]
pour un non-varargs et de supprimer cet avertissement
Qu'en est-il de NullPointerException ? J'ai trouvé cette réponse, mais je n'ai pas trouvé de scénario réel pour cela ! L'avez-vous fait ? Pourquoi ?
Disons que vous avez ces deux fonctions, et supposons qu'elles acceptent null
comme une valeur valide pour les seconds paramètres.
void ShowMessage(String msg, Control parent);
void ShowMessage(String msg, MyDelegate callBack);
Ces deux méthodes ne diffèrent que par le type de leurs seconds paramètres. Si vous voulez utiliser l'une d'entre elles avec un paramètre de type null
en tant que second paramètre, vous devez convertir le null
au type du second argument de la fonction correspondante, afin que le compilateur puisse décider de la fonction à appeler.
Pour appeler la première fonction : ShowMessage("Test", (Control) null);
Pour le second : ShowMessage("Test2", (MyDelegate) null);
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
0 votes
Peut-être juste un codeur inexpérimenté ? Ou quelqu'un qui a modifié le code de doSomething((cast)something) ; et voulait le changer en null, et n'a pas pris la peine de supprimer le cast ? Le problème est-il présent à plusieurs endroits ou à une seule instance ?
0 votes
Je ne me souviens plus où je l'ai lu, mais j'ai vu ceci et j'ai appris que l'on peut transformer un null en objet. Le problème est que je n'arrive pas à trouver un scénario raisonnable ! :P
0 votes
Il ne s'agit pas d'un jet nul. Il n'y a rien de tel. C'est un moulage d'un nul. Totalement l'opposé. Votre titre original était meilleur.