如何将泛型类型限制为不扩展类?

时间:2013-05-02 06:26:10

标签: java generics overloading

这些是在Java中创建“委托”的简单方法:

public static <B> Runnable runnableOf(B o, String methodName) {
    return findMethod(methodName, o.getClass(), o);
}
public static <B> Runnable runnableOf(Class<B> base, String methodName) {
    return findMethod(methodName, base, null);
}

此代码中有两种情况:当B(要调用的方法的类)不是Class<?>时,用户应传递B的实例,因此方法将是一个实例方法。否则,用户可以传递Class<B>来调用静态方法。

然而,编译器抱怨它们含糊不清。我认为其中一个解决方案是在第一次重载中强制B不要成为Class<?>的实例。我怎么能这样做?

更新

上述代码的解决方案在我自己的答案中给出。但是它没有回答标题中的问题。我希望任何人都可以回答这个问题并提供另一个有意义的例子。

1 个答案:

答案 0 :(得分:0)

抱歉这是一个错误。问题是findMethod不知道null的类型是什么。所以修复如下:

public static <B> Runnable runnableOf(Class<B> base, String methodName) {
    return findMethod(methodName, base, (B)null);
}

我不知道天气与否人们可以做我在标题中所描述的内容,但在我的例子中它并非必需品。