我遇到以下代码的问题:
question1.setText("question1_" + question_number() + "()");
我有多个返回字符串值的方法,名为“question1_x”(x是数字),方法question_number返回一个随机数。 当我运行这样的代码时,“question1”文本被设置为“question1_x()”,但我需要它做的是将文本设置为“question1_x()”方法返回它。我喜欢[“question1_”+ question_number()+“()”]被“.setText”视为方法而不是字符串。
提前谢谢你:)
答案 0 :(得分:2)
除非你采用反射,否则Java不允许你这样做。 反思几乎肯定是解决这个问题的错误方法。
每当您想要编号方法和/或字段时,请退一步并考虑使用正确的集合(例如,列表)。首先使用带有数字的单个方法替换编号的方法:
String question1(int questionNumber)
答案 1 :(得分:-1)
如果我理解这一点,你想要通过名称调用setText中的方法。它不能像你想要的那样完成。 你需要使用Reflections Api。请看下面的例子:
类myClass = Class.forName(“”);
方法m = myClass.getMethod(“”question1_“+ question_number()”,(Class [])null);
对象retVal = m.invoke(object_to_invoke_on,arguments);
的setText(retVal的);
然而,这有性能损失。它比普通的方法调用慢2-3倍。在您的情况下,您可以通过正确设计来完全避免这种情况。