繁体   English   中英

创建仅接受非抽象 Class 类型的 java 方法

[英]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 出现了两个问题:

  1. 签名还将接受MyInterface.class (因为 generics Class<? extends MyInterface>不是严格的上限)
  2. 可以通过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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM