Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
创建只接受非抽象类类型的java方法_Java_Class_Generics_Abstract_Signature - Fatal编程技术网

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

创建只接受非抽象类类型的java方法,java,class,generics,abstract,signature,Java,Class,Generics,Abstract,Signature,在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 } pu

在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
}

public Object getInstance(Class因为类可以有多个参数,我认为首先检查类是否具体,然后实现实例化它的方法更容易

public <T> boolean isConcrete(Class<T> c) {

    if (c.isInterface() || (c.getModifiers() & Modifier.ABSTRACT) == Modifier.ABSTRACT)
        return false;

    return true;
}
public boolean isConcrete(c类){
if(c.isInterface()| |(c.getModifiers()&Modifier.ABSTRACT)==Modifier.ABSTRACT)
返回false;
返回true;
}
希望这有帮助

编辑

抱歉,刚才在另一条评论中注意到,您可以简化此操作

public <T> boolean isConcrete(Class<T> c) {

    if (c.isInterface() || Modifier.isAbstract(c.getModifiers()))
            return false;

    return true;
}
public boolean isConcrete(c类){
if(c.isInterface()| |修饰符.isAbstract(c.getModifiers())
返回false;
返回true;
}

不,这是不可能的。你能解释一下你为什么需要这个吗?如果你能展示更大的画面,可能还有另一个解决方案。它接受
MyInterface
有什么问题吗?该方法到底应该做什么?我认为你可以直接在方法内部执行检查,如果检查失败,则抛出异常。你可以我认为可以很容易地确定给定的类是接口还是抽象类。类似于:
if(clz==null | | | clz.isInterface()| | Modifier.isastract(clz.getModifiers()){抛出新的IllegalArgumentException()}
好吧,不是什么超级具体的东西,只是我在考虑如何创建一些框架或库,从而可以/容易地使用引用方法的注释成员创建注释-MyAnnotation(delegate=MyClass::myMethod)是不可能的。必须传递字符串或(在一些包含FQCN和参数的客户格式中)或可能使用某些类(如我正在考虑的SAM的实现)。不知怎的,这让我想到了上述问题。但感谢您的评论/回答。反思。但前提是您知道自己在做什么。您可以对此进行进一步优化。只需否定条件并返回它即可