编译时检查构造函数是否存在

jpp*_*ade 5 java reflection

我使用如下构造函数将 hibernate 查询映射到对象:

Constructor<Product> contructor = Product.class.getConstructor(String.class, String.class, Integer.class, String.class, String.class, String.class,
                        String.class,String.class, String.class,Boolean.class);
criteria.setResultTransformer(new AliasToBeanConstructorResultTransformer(contructor));
Run Code Online (Sandbox Code Playgroud)

如果有人通过添加参数来修改构造函数,则此代码将在运行时失败。可以在编译时确保我们需要的构造函数确实存在吗?

Mar*_*rco 2

这基本上就是测试的目的。

例如:

@Test
public void constructorAvailableTest() {

    try {
        Constructor<Product> contructor = Product.class.getConstructor(String.class, String.class, Integer.class, String.class, String.class, String.class,
            String.class,String.class, String.class,Boolean.class);
    } catch( NoSuchMethodException nsme ) {
       fail( "The specified " + Product.class.getName() + " constructor does not exist!");
    }

}
Run Code Online (Sandbox Code Playgroud)

更好的是,您可以将反射性构造 Product 的代码放在静态方法中,然后在测试中调用它!