Когда и почему кто-то должен делать следующее:
doSomething( (MyClass) null );
Ты когда-нибудь делал это? Не могли бы вы поделиться своим опытом?
Когда и почему кто-то должен делать следующее:
doSomething( (MyClass) null );
Ты когда-нибудь делал это? Не могли бы вы поделиться своим опытом?
Если doSomething
перегружено, вам нужно явно указать нуль на MyClass
, чтобы была выбрана правильная перегрузка:
public void doSomething(MyClass c) {
// ...
}
public void doSomething(MyOtherClass c) {
// ...
}
Непридуманная ситуация, когда вам нужно бросить, - это когда вы вызываете функцию 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);
}
}
В последней строке появится следующее предупреждение:
Example.java:26: warning: non-varargs вызов метода varargs с неточным тип аргумента для последнего параметра;
лить вjava.lang.String
для varargs вызов
дляjava.lang.String[]
для вызов non-varargs и подавление этого предупреждение
Скажем, у вас есть эти две функции, и предположим, что они принимают null
как допустимое значение для вторых параметров.
void ShowMessage(String msg, Control parent);
void ShowMessage(String msg, MyDelegate callBack);
Эти два метода отличаются только по типу их вторых параметров. Если вы хотите использовать один из них с null
в качестве второго параметра, вы должны указать null
на тип второго аргумента соответствующей функции, чтобы компилятор мог решить, какую функцию вызывать.
Чтобы вызвать первую функцию: ShowMessage("Test", (Control) null);
Для второго: ShowMessage("Test2", (MyDelegate) null);