相关疑难解决方法(0)

我可以使用Java反射获取方法参数名吗?

如果我有这样的课程:

public class Whatever
{
  public void aMethod(int aParam);
}
Run Code Online (Sandbox Code Playgroud)

有没有办法知道,aMethod使用一个名为参数aParam,即类型的int

java reflection

116
推荐指数
6
解决办法
11万
查看次数

AspectJ MethodSignature为getParameterNames()返回null

我有一个方面基于目标方法的细节进行各种计算,因此提前提取这些如下:

    @Around("execution(* com.xyz.service.AccountService.*(..))")
public void validateParams(ProceedingJoinPoint joinPoint) throws Throwable {
    final MethodSignature signature = (MethodSignature) joinPoint.getSignature();

    final String methodName = signature.getName();
    final String[] parameterNames = signature.getParameterNames();
    final Object[] arguments = joinPoint.getArgs();
    ...
    ...
    ...
    joinPoint.proceed();
}
Run Code Online (Sandbox Code Playgroud)

在提取的细节中,所有细节都反映了除了始终返回null的parameterNames之外的预期信息.我希望它按照下面的签名返回{accountDetails}.谁会知道我可能会遗漏什么,或者这是一个错误?

这是我正在反对的目标方法的签名:

Long createAccount(RequestAccountDetails accountDetails);
Run Code Online (Sandbox Code Playgroud)

java reflection aop aspectj

6
推荐指数
1
解决办法
3865
查看次数

是否可以在scala中获取方法的参数名称

据我所知,我们不能用Java做到这一点.我们可以在scala中执行此操作吗?

假设有一种方法如下:

def insert(name:String, age:Int) {
    // insert new user
}
Run Code Online (Sandbox Code Playgroud)

是否可以获取参数名称nameagescala?


UPDATE

我想这样做,因为我想自动绑定方法的参数.

例如,这是一个Web应用程序,它有一些定义为:

class UsersController extends Controller {
    def create(name: String, age: Int) {
          // insert the user
    }
}
Run Code Online (Sandbox Code Playgroud)

客户点击submit了创建用户表单的按钮.网址将/users/create与一些参数发送.

在服务器端,当我们得到一个名为url的url时/users/create,我们会create在控制器中找到一个方法,现在找到一个方法UsersController.然后我必须得到该方法的参数名称,然后我们可以得到它们的值:

val params = getParamsFromRequest()
val method = findMethodFromUrl("/users/create")
val paramNames = getParamNamesOfMethod(method)
val paramValues = getValues(params, paramNames)

// then invoke
method.invoke(controller, paramValues)
Run Code Online (Sandbox Code Playgroud)

现在,关键是如何获取方法的参数名称?

parameters scala

3
推荐指数
1
解决办法
879
查看次数

标签 统计

java ×2

reflection ×2

aop ×1

aspectj ×1

parameters ×1

scala ×1