我正在练习中用Java写一个skiplist类。我编写了一个名为的类SkipListInternal<E>
,其中包含实际的跳过列表。我还制作了一个包装类SkipListSet<E>
,该包装类实现了SortedSet<E>
接口并包含的实例SkipListInternal<E>
。
其中,SkipListInternal<E>
包含一个方法E find(E e)
,该方法返回等于e
存在的元素,否则返回null。
在编写boolean contains(Object o)
(继承自Collection<E>
via
SortedSet<E>
)方法时,我注意到其参数是一个Object而不是一个E。我打算这样做,但由于类型擦除而无法实现:
public class SkipListSet<E> implements SortedSet<E>{
private SkipListInternal<E> skiplist;
...
public boolean contains(Object o){
if (!(o instanceof E)) return false;
return skiplist.find((E) o) != null;
}
...
}
由于无法通过这种方式完成操作,该怎么办?
严格来说,这样的实现是错误的。
这样做的原因是,即使对象不是type E
,它仍然可以true
在equals()
调用时返回。
假设有一秒钟,您有一个这样的类:
public class FakeString {
private final String value;
public FakeString(String value) {
if (value == null) {
throw new IllegalArgumentException();
}
this.value = value;
}
public int hashCode() {
return value.hashCode();
}
public boolean equals(Object o) {
return value.equals(o);
}
}
然后此代码将打印true
:
List<String> strings = Arrays.asList("foo", "bar", "baz");
System.out.println(strings.contains(new FakeString("bar")));
只是要澄清一下:此行为是 有意的, 并且是contains()
采用a
Object
代替的原因E
。remove()
顺便说一句,对于,也是如此。
问题内容: 我要实现以下功能: 如何检查向量元素类型? 请注意, 向量可能为空,因此我无法检查第一个元素是“ instanceof”整数还是String … 编辑: 好吧,我脑子里有个念头,我不知道它是否会起作用 我可以按以下方式实现checkType函数: 是否可以检查T是否为整数?! 提前致谢 问题答案: *由于 类型擦除, *泛型类型参数 在运行时不可恢复(某些特殊情况除外)。这意味着在运行
在进一步介绍之前,让我们花点时间来讨论编写"通用"代码时的约束条件 - 即运行在服务器和客户端的代码。由于用例和平台 API 的差异,当运行在不同环境中时,我们的代码将不会完全相同。所以这里我们将会阐述你需要理解的关键事项。 服务器上的数据响应 在纯客户端应用程序 (client-only app) 中,每个用户会在他们各自的浏览器中使用新的应用程序实例。对于服务器端渲染,我们也希望如此:每个请求
我如何才能编写一个排序方法,它将与实现的任何类的一起工作?我查看了的源代码,它的方法签名中有一些语法我不理解。 下面是我对如何编写方法的最佳(可悲的)猜测,该方法不对进行排序,但有正确的方法头来进行排序。我将使用调用它,其中是实现的类的的任何类的实例(假设之前导入了,请参阅更多信息)。 此外,我想添加一个方法,它为添加一个参数,我只需要知道形参是什么。我想,一旦我知道如何编写常规的时,我就能搞清楚
我们要讲到的第一个类型是 ,也被称为 vector。vector 允许我们在一个单独的数据结构中储存多于一个的值,它在内存中彼此相邻地排列所有的值。vector 只能储存相同类型的值。它们在拥有一系列项的场景下非常实用,例如文件中的文本行或是购物车中商品的价格。 为了创建一个新的空 vector,可以调用 Vec::new 函数,如示例 8-1 所示: 示例 8-1:新建一个空的 vector 来
在进一步介绍之前,让我们花点时间来讨论编写"通用"代码时的约束条件 - 即运行在服务器和客户端的代码。由于用例和平台 API 的差异,当运行在不同环境中时,我们的代码将不会完全相同。所以这里我们将会阐述你需要理解的关键事项。 服务器上的数据响应 在纯客户端应用程序(client-only app)中,每个用户会在他们各自的浏览器中使用新的应用程序实例。对于服务器端渲染,我们也希望如此:每个请求应该
在我的项目(spring boot应用程序)中,我有大约200个测试用例。最近,我们为缓存管理器(ehcache)实现了一个工厂bean,它位于我的启动类(@SpringBootApplication)中。 我的问题是,一旦带有工厂bean的启动类被一个测试用例执行,所有后续的测试用例都会失败,并出现错误。。。 “同一个VM中已存在另一个同名“appCacheManager”的CacheManag