如何检查java类是否包含默认构造函数
我想检查Java类是否包含默认构造函数 案例1:如何检查java类是否包含默认构造函数,java,oop,jakarta-ee,Java,Oop,Jakarta Ee,我想检查Java类是否包含默认构造函数 案例1: public class ClassWithConstructor { //attributes... //default constructor public ClassWithConstructor(){} } 案例2: public class ClassWithoutConstructor { //attributes... // no default constructor } 在
public class ClassWithConstructor {
//attributes...
//default constructor
public ClassWithConstructor(){}
}
案例2:
public class ClassWithoutConstructor {
//attributes...
// no default constructor
}
在案例1中,我想打印“ClassWithConstructor包含一个默认构造函数。”
在案例2中,我想打印“ClassWithoutConstructor不包含任何默认构造函数”您可以通过Java反射API检查您的类,有一个名为
构造函数的类(请参阅)。但是,不确定您是否能够真正区分Java默认构造函数和您自己定义的无参数构造函数。您不能检查这种情况。不带构造函数的类创建了一个默认构造函数,其属性与公共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{ }
}
import java.lang.reflect.Constructor;
导入org.junit.Test;
公共类ScriptBuilderTest{
@试验
公开无效测试(){
Class ObjectWithDC=ObjectWithDeclaredConstructor.Class;
Class ObjectWithoutDC=ObjectWithoutDeclaredConstructor.Class;
构造函数[]ctorsWithDC=ObjectWithDC.getDeclaredConstructors();
构造函数[]ctorsWithoutDC=ObjectWithoutDC.getDeclaredConstructors();
系统输出打印项次(“结束”);
}
具有DeclaredConstructor的公共类对象{
public ObjectWithDeclaredConstructor(){}
}
没有DeclaredConstructor{}的公共类对象
}
但是在案例2中有一个默认构造函数,或者两个都有object的默认构造函数请记住,如果ClassWithoutConstructor
没有构造函数,那么实际上您将有一个默认构造函数。事实上,反之亦然-案例1没有默认构造函数,因为您已经覆盖了它。默认构造函数是java在不提供时生成的,称为无参数构造函数。嘿,Fleshhard,谢谢你的链接,我使用反射API检查了这个解决方案,但它没有给我想要的。我们可以说我想在java类中搜索一个单词,所以我的单词是“public classname(){}”,我想检查我的java类是否包含这个单词。这需要查看源代码。您在运行时没有可用的源代码。。。。当然,除非您在文件级手动解析源文件,否则可能会临时使用构造函数.isSynthetic()
(或检查符号修饰符),但(生成的)默认构造函数不被视为合成的。不过再想想,生成的默认构造函数有一个包私有可见性,因此检测到的任何公共无参数构造函数都有很好的机会被显式声明为OP请求。非常感谢各位,我没有找到我想要的,因此,如果其中任何一个实体不包含默认构造函数,我将手动检查包含456个实体的包。欢迎使用。如果您使用的是Unix系统,请尝试使用bash脚本在文件中查找声明的构造函数,或使用MS Systems中的powershell脚本。嘿,单击,我正在使用mac,我可以使用脚本吗?请给我更多解释?。