2015-11-10 87 views
-1

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

案例1:

public class ClassWithConstructor { 

    //attributes... 

    //default constructor 
    public ClassWithConstructor(){} 

} 

案例2:

public class ClassWithoutConstructor { 

    //attributes... 

    // no default constructor 

} 

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

在第二种情况下,我想打印"ClassWithoutConstructor doesn't contain any default constructor"

+6

但如果2有一个默认的构造函数 –

+1

两者都有对象 –

+1

的默认构造函数记住,如果'ClassWithoutConstructor'没有构造,那么你实际上将有一个默认的构造函数。 – SomeJavaGuy

回答

1

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

+0

嘿FleshWound,谢谢你的链接,我使用Reflection API检查这个解决方案,但它并没有给我我想要的。我们可以说我想在java类中搜索一个单词,所以我的单词是“public classname(){}”,我想检查我的java类是否包含这个单词。 – James

+1

这将涉及到查看源代码。您在运行时没有可用的源代码。 –

+0

...除非您在文件级别手动解析源文件,当然。 – endowzoner

0

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

如果您调试此代码,您将看到两个构造函数[]具有除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{ } 
} 
+0

非常感谢你们,我没有找到我想要的东西,所以我会手动检查包含456个实体的包,如果它们中的任何一个不包含默认构造函数。 – James

+0

不客气。如果您在Unix系统上,请尝试使用bash脚本来查找文件中声明的构造函数,或使用MS Systems中的powershell脚本。 – viticlick

+0

嘿viticlick,即时通讯使用mac,我可以用脚本来做,你能给我更多的解释吗? – James