如果我有这样的课程:
public class Whatever { public void aMethod(int aParam); }
有没有办法知道aMethod使用名为aParam类型的参数int?
aMethod
aParam
int
总结一下:
method.getParameterTypes()
为了编写编辑器的自动完成功能(如你在评论之一中所述),有几个选项:
arg0
arg1
arg2
intParam,stringParam,objectTypeParam
在Java 8中,你可以执行以下操作:
import java.lang.reflect.Method; import java.lang.reflect.Parameter; import java.util.ArrayList; import java.util.List; public final class Methods { public static List<String> getParameterNames(Method method) { Parameter[] parameters = method.getParameters(); List<String> parameterNames = new ArrayList<>(); for (Parameter parameter : parameters) { if(!parameter.isNamePresent()) { throw new IllegalArgumentException("Parameter names are not present!"); } String parameterName = parameter.getName(); parameterNames.add(parameterName); } return parameterNames; } private Methods(){} }
因此,对于你的课程,Whatever我们可以进行手动测试:
import java.lang.reflect.Method; public class ManualTest { public static void main(String[] args) { Method[] declaredMethods = Whatever.class.getDeclaredMethods(); for (Method declaredMethod : declaredMethods) { if (declaredMethod.getName().equals("aMethod")) { System.out.println(Methods.getParameterNames(declaredMethod)); break; } } } }
·如果你已将·参数传递给Java 8编译器,则应打印该文件。
对于Maven用户:
<properties> <!-- PLUGIN VERSIONS --> <maven-compiler-plugin.version>3.1</maven-compiler-plugin.version> <!-- OTHER PROPERTIES --> <java.version>1.8</java.version> </properties> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>${maven-compiler-plugin.version}</version> <configuration> <!-- Original answer --> <compilerArgument>-parameters</compilerArgument> <!-- Or, if you use the plugin version >= 3.6.2 --> <parameters>true</parameters> <testCompilerArgument>-parameters</testCompilerArgument> <source>${java.version}</source> <target>${java.version}</target> </configuration> </plugin> </plugins> </build>