Java 使用HashMap和反射调用具有变量参数类型的方法
因此,我有以下场景:Java 使用HashMap和反射调用具有变量参数类型的方法,java,reflection,types,variadic-functions,Java,Reflection,Types,Variadic Functions,因此,我有以下场景: 我有一个名为AIInstruction的类,它实际上并不意味着要自己实例化,而是通过一个子类来实例化 我有一组名为AIInstruction.***的类,它们扩展了AIInstruction。这些类中的每一个都有一个构造函数,但它们所需的参数类型和数量有所不同 我有一个经理类,看起来像这样: public class AIControls { public static HashMap<String, Class<? extends AIInstruc
- 我有一个名为
的类,它实际上并不意味着要自己实例化,而是通过一个子类来实例化AIInstruction
- 我有一组名为
的类,它们扩展了AIInstruction.***
。这些类中的每一个都有一个构造函数,但它们所需的参数类型和数量有所不同AIInstruction
- 我有一个经理类,看起来像这样:
但是,该代码基本上有两个问题:public class AIControls { public static HashMap<String, Class<? extends AIInstruction>> INSTRUCTION_DICTIONARY = new HashMap<String, Class<? extends AIInstruction>>(); static { INSTRUCTION_DICTIONARY.put("rotateTowards", AIInstruction_rotateTowards.class); INSTRUCTION_DICTIONARY.put("moveToPoint", AIInstruction_moveToPoint.class); // (etc...) } LinkedList<AIInstruction> _instruction_queue; public AIControls() { _instruction_queue = new LinkedList<AIInstruction>(); } public void addInstruction(String instruction, Object... params) { /* ??? */ } }
- 我不确定用什么来代替
/**/代码>。我想我应该输入参数的类型,但它们可以是任何类型,因为每个
子类都有非常不同的构造函数(在参数的类型和数量上)AIInstruction
- 我也不确定
调用是否有效,因为params数组包含newInstance
类型的实例Object
非常感谢您的帮助,谢谢 您可以使用
Class.getConstructors()
获取类中所有构造函数的数组。假设只有一个构造函数,只需检查大小以防止OOB异常,然后将[0]保存为构造函数
看起来您不需要知道构造函数采用什么类型的参数,但如果您知道,您可以始终使用constructor.getParameterTypes()
。如前所述,如果是这样的话,这也可以用来识别多个构造函数
public void addInstruction(String instruction, Object... params)
{
Class<?> the_class = INSTRUCTION_DICTIONARY.get(instruction);
Constructor<?> the_constructor = the_class.getConstructor(/* ??? */);
AIInstruction new_instruction = the_constructor.newInstance(params);
_instruction_queue.add(new_instruction);
}