Eclipse给了我一个警告,说类型Assert
中的方法assertEquals(Object[],Object[])
已被弃用。我正在使用JUnit4。
我在Eclipse中编写了以下代码:
import org.junit.Test;
import org.junit.Assert;
public class Generics {
public <T> T[] genericArraySwap(T[] list, int pos1, int pos2) throws IndexOutOfBoundsException {
...
}
@Test
public void genericArraySwapTest() {
Integer[] IntegerList = {0, 1, 2, 3, 4};
Assert.assertEquals(new Integer[] {0, 1, 2, 4, 3}, genericArraySwap(IntegerList, 3, 4));
}
}
有人能告诉我为什么不推荐这个方法,或者我应该用什么方法来代替吗?
因为Java类型系统缺乏表现力,所以不推荐使用它。
尽管所有其他的assertEquals
方法都将使用=
(对于原语)或equals
(对于引用类型)来比较参数,但您不想使用这两种方法来比较数组:所有数组都是对象的子类型(即它们是引用类型),并且不重写
equals
,因此,使用assertEquals
比较数组将检查这两个数组是否相同。
相反,您应该调用
assertArrayEquals
,它比较数组是否具有相同的长度,如果是,则比较相应的数组元素是否相等。
理想情况下,您可以指定如下参数类型:
assertEquals(T, T)
其中,
T
是“除数组之外的对象的任何子类型”。但在Java中你根本无法做到这一点;即使有一种表达这种约束的方法,也无法阻止使用array调用该方法,因为您总是可以将它们上溯到
Object
s。
你唯一能做的就是:
提供一个重载,它接受Object
s
- 提供接受更多特定类型的重载,并标记这些重载
@Deprecated
。要覆盖所有数组类型,您需要9个重载(每个基元数组类型8个重载;Object[]
1个重载,它涵盖所有其他引用类型)。
这不会阻止您调用
assertEquals(t[],t[])
,但它确实通过编译器警告强调了存在问题;黄色在日食中蠕动;等
当然,如果您将数组向上投射到
对象
,这将不会有帮助;但在大多数情况下,除非你真的打算调用那个特定的方法,否则你不会这么做。
问题内容: [object Object]是JavaScript Object的默认字符串表示形式。 我会知道这是正义还是正义,但是为什么呢?为什么第一个单词是小写而第二个单词是大写?它是JSON还是JavaScript的一部分? 问题答案: 所有对象都有一个以格式显示内容的方法,其中type是对象类型。 当您在get上调用该对象时,并且在一个对象上调用该字符串时,您会得到该字符串,因为它基于Ob
问题内容: 来自的javadoc : 返回此Calendar是否代表指定Object所表示的时间之前的时间。此方法等效于: 当且仅当when是Calendar实例。否则,该方法返回false。 如果有人传递的不是Calendar实例的东西返回false,为什么它接受一个Object?为什么不只接受Calendar实例呢?这使我在相当长一段时间内一直在监视功能的不正确结果。 问题答案: 我认为没有特
我的代码片段如下所示 我收到的方法assertEquals(Object,Object)对于类型是不明确的。我不知道为什么我会得到它?
问题内容: 我想知道为什么它是Java不允许超负荷使用,虽然他们都以不同的方式使用? 使用方式如下: 而另一种形式: 使用方式如下: 这背后有什么原因吗? 问题答案: 这个15.12.2.5选择最具体的方法对此进行了讨论,但是它相当复杂。例如,在Foo(数字…整数)和Foo(整数…整数)之间进行选择 为了向后兼容,这些实际上是同一件事。 例如,您可以将main()定义为 一种使它们与众不同的方法是
问题内容: 我试图提醒函数返回的值,并且在提醒中获取了此值 [对象对象] 这是JavaScript代码 whichIsVisible是我要检查的功能 问题答案: 从对象到字符串的默认转换是。 在处理jQuery对象时,您可能想做 打印元素的ID。 如评论中所述,您应该使用Firefox或Chrome之类的浏览器中包含的工具代替来自省对象。 旁注 :ID不能以数字开头。
问题内容: 换句话说,assertEquals是否与覆盖了该类的类一起使用 问题答案: 从您可以在Junit GitHub Repo上找到的assertEquals方法的源代码中: 您可以看到Junit正在使用该方法。 编辑: 该代码段来自于不推荐使用的Junit版本。 您可以在此处阅读有关“新” Junit的来源。想法基本相同,也使用了该方法。