在这种情况下,为什么Class没有一个很好的泛型?

Ed *_*mas 10 java

在这段代码中,为什么类型不能声明为Class<? extends B>

public class Foo<B> {
    public void doSomething(B argument) {
        Class<? extends Object> type = argument.getClass();
    }
}
Run Code Online (Sandbox Code Playgroud)

Pet*_*rey 4

这个问题是 Java 的语法不允许 getClass() 说它返回与其定义的类相匹配的类型,并且就编译器而言这不是特殊情况。所以你被迫投射结果。

在很多情况下,您希望能够指定this类型,例如链接,因此我希望有一天它们能够包含此功能。

你可以写

Class<? extends this> getClass();
Run Code Online (Sandbox Code Playgroud)

或者

public this clone(); // must return a type of this class.
Run Code Online (Sandbox Code Playgroud)

或者

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, 0, fc.size())
                         .order(ByteOrder.nativeOrder());
Run Code Online (Sandbox Code Playgroud)