繁体   English   中英

如何检查 java class 是否包含默认构造函数?

[英]How to check if a java class contain a default constructor?

我想检查 Java class 是否包含默认构造函数。

情况1:

public class ClassWithConstructor {

    //attributes...

    //default constructor
    public ClassWithConstructor(){}

}

案例二:

public class ClassWithoutConstructor {

    //attributes...

    // no default constructor

}

在案例 1 中,我想打印"ClassWithConstructor contains a default constructor."

在情况 2 中,我想打印"ClassWithoutConstructor doesn't contain any default constructor"

您可以通过Java Reflection API检查您的类,有一个名为Constructor的类(请参阅http://docs.oracle.com/javase/7/docs/api/java/lang/reflect/package-frame.html )。 但是,不确定您是否能够真正区分Java默认构造函数和您自己定义的无参数构造函数。

你不能检查这种情况。 没有构造函数的类创建一个默认构造函数,其属性与public ClassName(){} ,但是您可以检查修饰符是否更改。

如果您调试此代码,您将看到两个Constructors []具有除clazz之外的相同属性,它们具有不同的名称。

import java.lang.reflect.Constructor;

import org.junit.Test;

public class ScriptBuilderTest {

@Test
public void test()  {

    Class<ObjectWithDeclaredConstructor> ObjectWithDC = ObjectWithDeclaredConstructor.class;
    Class<ObjectWithoutDeclaredConstructor> ObjectWithoutDC = ObjectWithoutDeclaredConstructor.class;

    Constructor<?>[] ctorsWithDC = ObjectWithDC.getDeclaredConstructors();
    Constructor<?>[] ctorsWithoutDC = ObjectWithoutDC.getDeclaredConstructors();

    System.out.println("end");
}

public class ObjectWithDeclaredConstructor{
    public ObjectWithDeclaredConstructor(){}
}

public class ObjectWithoutDeclaredConstructor{  }
}

情况 1:在情况 1 中,您没有默认构造函数。 但在情况 2 中,您有一个默认构造函数。 在情况 1 中,构造函数是由您创建的,而不是由您的编译器创建的。 在 Java 中,编译器始终负责创建默认构造函数。 在案例 1 中,编译器代码如下所示。

public class ClassWithConstructor {


    public ClassWithConstructor(){
         super();//This code is generated by compiler
     }

}

S0 super()由编译器生成,因为构造函数的第一行应该是this()super() 因为它没有我创建的任何东西super()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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