80
A
回答
125
如果doSomething
超载,你需要显式转换为null MyClass
所以正确的超载选择:
public void doSomething(MyClass c) {
// ...
}
public void doSomething(MyOtherClass c) {
// ...
}
非做作的情况下,你需要转换的,当你调用一个可变参数功能:
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 调用可变参数方法不准确 参数类型为最后一个参数;
投给java.lang.String
的可变参数 呼叫
投给java.lang.String[]
的 非可变参数调用,并抑制这种 警告
32
比方说,你有这两个函数,并假定他们接受null
为有效第二个参数的值。
void ShowMessage(String msg, Control parent);
void ShowMessage(String msg, MyDelegate callBack);
这两种方法可以通过第二参数的类型而不同。如果你想用null
中的一个作为第二个参数,你必须将null
转换为相应函数的第二个参数的类型,以便编译器可以决定调用哪个函数。
调用第一个函数:ShowMessage("Test", (Control) null);
对于第二个:ShowMessage("Test2", (MyDelegate) null);
相关问题
- 1. 为什么不能投射?
- 2. 为什么不能投射?
- 3. 为什么投射功能?
- 4. Linq - 将IQueryable投射到IList返回null - 为什么?
- 5. 为什么Convert.ToString(null)在您投射null时返回不同的值?
- 6. 为什么Null无效的LINQ投影?
- 7. 为什么在WndProc中投射错误?
- 8. 将null作为对象投射?
- 9. 投射一个NULL值
- 10. 为什么在.NET中投射速度比反射速度快?
- 11. 将ptr :: null()投射到Windows句柄
- 12. 为什么铸造Object(null)不为null?
- 13. 为什么NULL值在事实表中映射为0?
- 14. 为什么listOfFiles为null?
- 15. JavaFX TreeView为null为什么?
- 16. getClass()。getClassLoader()为null,为什么?
- 17. 为什么mSuggestedFriends为null?
- 18. 为什么在调用IEnumerable.Contains()时需要投射动态对象?
- 19. 为什么Html.DropDownListFor需要额外的投射?
- 20. 为什么我需要在此Java示例中投射HttpURLConnection?
- 21. 为什么我快速动态投射失败?
- 22. 为什么我会收到此投射错误?
- 23. 为什么我不能在if语句内部投射对象?
- 24. 为什么投射会在java中产生正确的结果?
- 25. 为什么在通过int投射后获得EXC_BAD_ACCESS?
- 26. 为什么我的投射物不在屏幕上绘制?
- 27. C#按位操作短裤 - 为什么投射到一个int?
- 28. 为什么PHP中的投射和比较比is_ *更快?
- 29. 使用'as'投射 - 为什么这不起作用?
- 30. 为什么我必须显式投射到受限类型?
也许只是一个没有经验的编码器?或者是从doSomething改变代码的人((cast)something);并希望将其更改为无效,只是不打算删除演员?它是在多个地方还是只有一个实例? – 2008-11-24 23:20:26
我不记得自己在哪里读过它,但是我看到了这一点,并了解到可以将null指定给对象。问题是,我找不到合理的场景! :P – pek 2008-11-24 23:22:11