我想检查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"
。
答案 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{ }
}