在Java中,是否可以创建一个方法的签名,接受 都 非抽象类类型?
类似这样的东西。
public Object getInstance(Class<? extends ConcreteClassSuperType> someNonAbstractClass){
//some logic that can safely assume that the Class object is not an interface type nor an abstract class
}
其中 ConcreteClassSuperType
只是为了说明我的意图而虚构的字体。用 ? extends Object
这里并不能解决问题。
阐述一下。 在目前的情况下,问题是比较特殊的,因为我的签名不一定要接受 全部 具体的类,但只有那些实现了某些接口的类,也就是说,我试图创建一个签名,接受一个类的Class类型,该类的 implements MyInterface
. 所以,一个人可以fx通 MyClass.class
,其中 MyClass implements MyInterface
. 出现了两个问题。
MyInterface.class
(因为属 Class<? extends MyInterface>
不是一个严格的上限)extends MyInterface
.因为类可以有多个参数,我认为首先检查类是否是具体的,然后再实现实例化它的方法,这样更容易。比如
public <T> boolean isConcrete(Class<T> c) {
if (c.isInterface() || (c.getModifiers() & Modifier.ABSTRACT) == Modifier.ABSTRACT)
return false;
return true;
}
希望能帮到你。
编辑
对不起,刚刚在另一条评论中注意到,你可以简化这个... ...
public <T> boolean isConcrete(Class<T> c) {
if (c.isInterface() || Modifier.isAbstract(c.getModifiers()))
return false;
return true;
}