创建只接受非抽象类类型的java方法。

问题描述 投票:2回答:1

在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. 出现了两个问题。

  1. 签名也会接受 MyInterface.class (因为属 Class<? extends MyInterface> 不是一个严格的上限)
  2. 可以通过另一个接口的类类型,该接口是 extends MyInterface.
java class generics abstract signature
1个回答
0
投票

因为类可以有多个参数,我认为首先检查类是否是具体的,然后再实现实例化它的方法,这样更容易。比如

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;
}
© www.soinside.com 2019 - 2024. All rights reserved.