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

时间:2015-11-10 14:32:13

标签: java oop java-ee

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

案例1:

public class ClassWithConstructor {

    //attributes...

    //default constructor
    public ClassWithConstructor(){}

}

案例2:

public class ClassWithoutConstructor {

    //attributes...

    // no default constructor

}

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

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

您无法查看此案例。没有构造函数的类创建一个默认构造函数,其属性与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{  }
}