Java 如果类型擦除只允许我调用Object()方法,我如何调用引用队列中项的方法?

Java 如果类型擦除只允许我调用Object()方法,我如何调用引用队列中项的方法?,java,type-erasure,soft-references,Java,Type Erasure,Soft References,我有一个引用队列,声明为: ReferenceQueue<MapChunk> rqueue = new ReferenceQueue<>(); 我的编译器错误表明发生了类型擦除,我留下了对象ref.get()(由于队列的原始类型)。我既不能对需要的对象调用方法,也不能将其传递给需要mapcunk本身的方法。当然,这会妨碍引用队列的许多使用,在这种情况下,我可能做错了什么。我确信我在运行时只会得到mapcunk对象,所以我应该使用cast吗?做点别的吗?根本不使用引用队列

我有一个引用队列,声明为:

ReferenceQueue<MapChunk> rqueue = new ReferenceQueue<>();
我的编译器错误表明发生了类型擦除,我留下了对象
ref.get()
(由于队列的原始类型)。我既不能对需要的对象调用方法,也不能将其传递给需要
mapcunk
本身的方法。当然,这会妨碍引用队列的许多使用,在这种情况下,我可能做错了什么。我确信我在运行时只会得到
mapcunk
对象,所以我应该使用cast吗?做点别的吗?根本不使用引用队列

编辑:如果使用
Reference ref=rqueue.poll()
我会得到以下结果:

cannot convert from Reference<capture#1-of ? extends MapChunk> to Reference<MapChunk>

编辑:我猜这只是一个错误消息,因为当另一个错误被修复时,类型确实正确转换了。

如果不想删除类型,请不要删除类型

Reference<? extends MapChunk> ref = rqueue.poll();
MapChunk mc = ref.get();

Reference+1我错过的就是这么简单?我的印象是,在创建和使用队列时,该类型已被删除。顺便说一句,第一句很有趣。@我喜欢让事情简单;)实际上,还有一个小问题。如果您看到编辑,我会得到一个非常奇怪的失败尝试,从
参考
转换,如果这是有效的语法。将其更改为
Reference@hexafraction对不起,您必须使用
?扩展MapChunk
@Peter Lawrey:类型擦除仍将发生。为泛型引用指定有界类型参数(而不是将其视为原始/无界类型)允许编译器将ref.get()视为返回所需类型而不是对象。
cannot convert from Reference<capture#1-of ? extends MapChunk> to Reference<MapChunk>
The method addMapChunk(Position, SoftReference<MapChunk>) in the type HashMap<Position,SoftReference<MapChunk>> is not applicable for the arguments (Position, capture#3-of ? extends MapChunk).
Reference<? extends MapChunk> ref = rqueue.poll();
MapChunk mc = ref.get();