- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我不认为我理解可变参数如何处理传入的对象:
public class NoSense {
public static void someMethod(String a, Object... things) {
System.err.println("a->" + a);
System.err.println(things.getClass().getName());
for (Object object : things) {
System.err.println("thing->" + object);
}
}
public static void main(String[] args) {
String[] x = new String[] { "what", "is", "up?" };
NoSense.someMethod("1", x);
NoSense.someMethod("2", x, "extra");
}
结果是
a->1
[Ljava.lang.String;
thing->what
thing->is
thing->up?
a->2
[Ljava.lang.Object;
thing->[Ljava.lang.String;@4d20a47e
thing->extra
为什么它会将第一个集合视为字符串数组,而将第二个集合视为对象数组引用?
最佳答案
为了保持向后兼容性,可变参数是编译器尝试解析方法调用的最后一件事。因为调用 NoSense.someMethod("1", x);
可以解析为 someMethod(String a, Object[] things)
,所以它是这样解析的。它可以做到这一点,因为数组类型是协变的。
调用NoSense.someMethod("2", x, "extra");
但是,不能解析为someMethod(String a, Object[] things)
,因此使用可变参数创建一个 new Object[]{x, "extra"}
,然后将其作为 things 参数传递。
关于java - Varags 对象处理异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5009555/
假设我在 Java8 中有两个可变参数函数: public static Class3 func1(Class1... t){ ... } public static Class3 func2(Cla
我不认为我理解可变参数如何处理传入的对象: public class NoSense { public static void someMethod(String a, Object... thing
您好,我正在尝试在“varags”和“增强型 for 循环”的帮助下进行加法。但是我得到了这个标记“此方法必须返回 int 类型的结果”。 class Hello1 { int pluss(int..
这个问题不太可能帮助任何 future 的访问者;它只与一个小的地理区域、一个特定的时间点或一个非常狭窄的情况有关,这些情况并不普遍适用于互联网的全局受众。为了帮助使这个问题更广泛地适用,visit
当使用Lua 5.2 API时,下面的代码打印“nil” function __debug(szName, ...) print(type(arg)); end __debug("s", 1,
我是一名优秀的程序员,十分优秀!