[英]Create java method that only accepts non-abstract Class types
在 Java 中,是否可以创建一个接受所有非抽象 Class 类型的方法/签名?
这有点像:
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
在这里? extends Object
并不能解决问题。
详细说明:在手头的情况下,问题更具体一点,因为我的签名不必接受所有具体的类,而只接受那些实现某些接口的类,即我试图创建一个接受 Class 类型的 class 类型的签名implements MyInterface
。 所以人们可以通过MyClass.class
,其中MyClass implements MyInterface
。 出现了两个问题:
MyInterface.class
(因为 generics Class<? extends MyInterface>
不是严格的上限)extends MyInterface
的另一个接口的 class 类型。因为类可以有多个参数,我认为首先检查 class 是否具体,然后实现实例化它更容易。 喜欢,
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;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.