在这段代码中,为什么不能将类型声明为Class?延长B>
public class Foo<B> { public void doSomething(B argument) { Class<? extends Object> type = argument.getClass(); } }
解决方法
这个问题是Java的语法不允许getClass()表示它返回一个与其定义的类匹配的类型,而且就编译器而言,这不是一个特殊情况.所以你被迫投降了.
在许多情况下,您希望能够指定此类型,例如为了链接,所以我希望他们包括这个功能有一天.
你可以写
Class<? extends this> getClass();
要么
public this clone(); // must return a type of this class.
要么
class ByteBuffer { this order(ByteOrder order); } class MappedByteBuffer extends ByteBuffer { } // currently this won't work as ByteBuffer defines order() MappedByteBuffer mbb = fc.map(MapMode.READ_WRITE,fc.size()) .order(ByteOrder.nativeOrder());