我正在用Android编写一些Junit测试,如果我这样做:
public void testSetId(){
Friend friend = new Friend(5);
assertEquals(5,friend.getId());
}
我得到一个不明确的方法调用错误。
方法调用不明确:AssertEquals(int,int)和AssertEquals(Object,Object)都匹配
然而,如果我这样做:
public void testSetId(){
Integer ID = 5;
Friend friend = new Friend(ID);
assertEquals(ID, friend.getId());
}
它起作用了。我觉得第二个函数应该做完全相同的事情。
这是怎么回事?
在Java5之前,没有自动装箱或自动拆箱。这意味着如果方法foo
的参数类型为整数
,则以下内容不会编译
foo(5); // 5 needs to be autoboxed
同样,如果方法bar
的参数类型为int
,则不会编译
bar(new Integer(5)); // The Integer needs to be unboxed
当引入自动装箱和自动拆箱时,现有代码必须继续以与以前完全相同的方式工作。因此,当编译器决定调用哪个方法时,它首先只考虑不需要自动装箱或自动拆箱的适用方法。只有当没有这样的方法时,编译器才考虑需要自动装箱和/或自动拆箱的方法。
由于getId
返回一个整数
,因此在第一个参数也是整数
的情况下,可以在不自动装箱的情况下调用Object
,Object
方法。但是,int
,int
方法只能通过自动取消装箱第二个参数来调用。因此,在您的第二个示例中,在第一遍选择了Object
,Object
重载。
在第一个示例中,您试图传递int和Integer。int
,
int
方法仅通过自动取消装箱第二个参数适用,而
Object
,
Object
方法仅通过自动装箱第一个参数适用。因此,无法在第一次传递时选择重载,并且由于两种方法都不比另一种方法更具体(您需要查找最后一位),编译器无法在这两种方法之间进行选择。
重载解析极其复杂,实际上我已经将其简化了很多(也有涉及var args的规则)。然而,在实践中,您不需要学习所有这些规则-如果您需要告诉编译器要应用哪种方法,您可以始终包含一个或多个显式强制转换:
assertEquals((Integer) id, friend.getId());
问题内容: 我对Java的 varargs 方法有些困惑: 当我尝试在不传递任何参数的情况下进行调用时,将调用方法的版本。我不明白为什么;通常,编译器必须引发错误。 相比之下,当我尝试不带任何参数的情况下,以下代码会生成编译器错误: 问题答案: 这里适用的一般规则是:如果一个方法签名严格比另一个方法签名 更具体 ,则Java选择它时不会出错。 从直觉上讲,如果您可以完全删除一个方法签名,则该方法签
问题内容: 这是一个无法编译的代码示例: 有人可以告诉我这些方法模棱两可的原因吗?先感谢您。 问题答案: 考虑方法签名 和 在装箱和拆箱之前,通话不会是模棱两可的。为了确保与Java的早期版本兼容,该调用将保持明确。因此,重载解决方案的第一阶段不允许装箱,拆箱或可变Arity调用,这些操作都是在同一时间引入的。可变Arity调用是通过为最后一个参数(而不是数组)传递参数序列来调用varargs方法
我正在使用Eclipse集成的ProGuard来混淆我的应用程序APK。 我已尝试为应用程序导出签名包。APK已安装,但无法正常工作(有无Proguard混淆) 但是,eclipse生成了一个带调试符号的APK,它工作得非常好。有什么办法可以混淆那个APK吗? 我需要得到一个正常工作的签名,混淆的APK不是为了发布,但内部共享。
我的目标是优化我的应用程序代码。我的代码如下所示: 当我在Netbeans中使用Findbugs进行静态分析时,它显示了一个类似于“方法调用无效的新整数(int)构造函数;使用Integer.valueOf(int)”的警告/错误。 我知道新整数(int)和整数之间的区别。valueOf(int)。 一个创建一个附加对象,另一个不创建。一个不缓存,另一个缓存。 所以我这样修改了我的代码... 但同
模糊可以柔化整个或部分图像中的细节。 左侧的原始图像未经过模糊处理。而对于右侧的图像来说,飞机后面的区域经过了模糊处理。
问题内容: 我想知道是否有某种方法可以使用jQuery(或jQuery可以修改的CSS)在div上应用高斯模糊。我已经研究了blur(),但至少使用Safari,它似乎并没有达到我想要的功能。如果可能的话,我想在效果上使用fadeIn,因此它会逐渐模糊。 谢谢你的帮助! 问题答案: 请注意,这是当DOM元素(例如文本框(输入等))失去焦点时,不应与您所谈论的那种模糊(高斯/运动模糊)混合在一起的时