简体   繁体   English

GWT:使用JSNI的本机方法:如何动态调用方法

[英]GWT: Native method using JSNI: how to call methods dynamically

I am using GWT and I have created a native method that calls the method cmd_addspace in the class EverlinkedActions and it works fine for now: 我正在使用GWT,并且创建了一个本地方法,该方法在类EverlinkActions中调用方法cmd_addspace,并且现在可以正常使用:

private static native String execute(String functionName,  Object[] vParams)/*-{
  try{          
      @es.gwt.client.dash.actions.impl.EverlinkedActions::cmd_addspace([Ljava/lanG/Object;)(vParams);          
  }catch(e){
      alert(e.message);
  }

}-*/;

How can i make the method name dynamic? 如何使方法名称动态化? it means instead of "cmd_addspace" i want to call the method "functionName" which its name is passed as argument in the native method. 这意味着我要代替“ cmd_addspace”来调用方法“ functionName”,其名称作为本机方法中的参数传递。

And is their a way to make the class name also dynamic? 他们是使类名也变得动态的一种方法吗? i want to have something like that: 我想要这样的东西:

private static native String execute(String className, String functionName,  Object[] vParams)/*-{
  try{          
      @es.gwt.client.dash.actions.impl.className::functionName([Ljava/lanG/Object;)(vParams);          
  }catch(e){
      alert(e.message);
  }

}-*/;

Thanks for any help 谢谢你的帮助

Not sure what you're trying to actually achieve here but I'm afraid JSNI doesn't work like that. 不知道您要在这里实际实现什么,但是恐怕JSNI不能那样工作。

Code such as @es.gwt.client.dash.actions.impl.EverlinkedActions::cmd_addspace([Ljava/lanG/Object;)(vParams); 诸如@es.gwt.client.dash.actions.impl.EverlinkedActions::cmd_addspace([Ljava/lanG/Object;)(vParams); needs to be a fully resolvable symbol at compile time because class and method names get replaced with their minimised versions. 在编译时需要将其作为完全可解析的符号,因为类和方法名称已被其最小化版本取代。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM