Java 如何从字符串到方法

Java 如何从字符串到方法,java,Java,我希望标题可以理解 我有4个功能: 公共空间设置1 公共无效设置2 公共无效设置3 公共无效设置4 现在,用户给了我一个方法部分名为String input=a1的字符串。 有没有不使用case选项的方法来激活正确的方法 类似于:设置+输入 内省就是为了这个目的,请参见 请注意,内省和反思是两件不同的事情。内省就是为了这个目的,请参见 请注意,内省和反思是两件不同的事情。您可以使用反思: public void invoke(final String suffix, final Object..

我希望标题可以理解

我有4个功能:

公共空间设置1

公共无效设置2

公共无效设置3

公共无效设置4

现在,用户给了我一个方法部分名为String input=a1的字符串。 有没有不使用case选项的方法来激活正确的方法

类似于:设置+输入

内省就是为了这个目的,请参见

请注意,内省和反思是两件不同的事情。

内省就是为了这个目的,请参见


请注意,内省和反思是两件不同的事情。

您可以使用反思:

public void invoke(final String suffix, final Object... args) throws Exception{
    getClass().getDeclaredMethod("set" + suffix, argTypes(args)).invoke(this, args);
}

private Class[] argTypes(final Object... args){
    final Class[] types = new Class[args.length];
    for(int i = 0; i < types.length; i++)
        types[i] = args[i].getClass();
    return types;
}

您可以使用反射:

public void invoke(final String suffix, final Object... args) throws Exception{
    getClass().getDeclaredMethod("set" + suffix, argTypes(args)).invoke(this, args);
}

private Class[] argTypes(final Object... args){
    final Class[] types = new Class[args.length];
    for(int i = 0; i < types.length; i++)
        types[i] = args[i].getClass();
    return types;
}

假设您处理了可能的异常,您可以使用Java反射API:

Method method = obj.getClass().getMethod("set" + "a1");
method.invoke(obj, arg1,...);

假设您处理了可能的异常,您可以使用Java反射API:

Method method = obj.getClass().getMethod("set" + "a1");
method.invoke(obj, arg1,...);

虽然这有点奇怪,但可能是反射。测试
虽然有点奇怪,但可能是反射。测试

反射?方法存储库?用工厂命令模式可能是一个值得考虑的模式。请参见答案。内省帮助您获得bean的属性及其相应的读/写的吸收器/ SETTES方法。方法仓库?命令模式与工厂可能是一个有用的模式考虑。见答案。内省帮助您获得的属性的bean及其相应的读/写的吸气剂/设定器方法…表示他的方法采用参数,此代码不考虑可能的参数。如果存在参数,则代码将失败,因为您尝试使用参数调用方法,但在获得该方法时,未指定参数类。因此,您的代码是无效的。@JoshM该代码只是给出一个想法,而不是准确地解决问题,这取决于OP。。。。表示他的方法采用参数,此代码不考虑可能的参数。如果存在参数,则代码将失败,因为您尝试使用参数调用方法,但在获得该方法时,未指定参数类。因此,您的代码是无效的。@JoshM该代码只是给出一个想法,而不是准确地解决问题,这取决于操作。不,它们不是。内省使用了隐藏的反射。从概念上讲,它们是不同的,但你是对的,从依赖性的角度来看,内省与反射紧密相连。有一点不同:但更像是内省是反射的一部分。不,它们不是。内省使用了隐藏的反射。从概念上讲,它们是不同的,但你是对的,从依赖性的角度来看,内省与反射紧密相连。有一点不同:但更像是内省是反射的一部分。