是否可以使用变量调用方法?

在PHP(例如),你可以使用这个方法来调用使用可变这样的功能:是否可以使用变量调用方法?

$funcname = "print"; 

$funcname("Whatever..."); // Same as: print("Whatever...");

什么是Java中使用的方法是什么?

回答:

您可以使用

Class<?> klass = object.getClass(); 

Method method = klass.getMethod("name", String.class); // parameter types, if any

method.invoke(object, "whatever"); // parameters, if any

加样板代码来捕获5种不同的例外(他们答应介绍Java 7的一个共同的超类型)。

回答:

Java Reflection API可以提供此功能。 (不完全像PHP那样,你)

回答:

是的。使用Method.invoke。此外还有一些示例here

回答:

您可以使用反射,但是如果您希望有一个打印某些内容的方法,并且稍后想要更改该行为,则只需编写一个方法并调用该方法即可。

回答:

虽然你可以如许多人已经指出的那样用反射来做这件事,对于你在评论中提到的用于回答问题“为什么?”的用例,我会用一个接口来代替。

回答:

请记住,这种反射在Java中并不典型,就像它在更多功能导向的语言中一样,比如Ruby或甚至(等待它)的C#。技术本身没有什么问题,但是你确实失去了编译器保护,这可能会导致难以发现的错误或者对于不期望这些路径的其他开发人员造成混淆的代码。我不是认为Java中的所有反思都被认为是有害的,但它绝对不是主流实践。谨慎使用。

也许更好,更友善的解决方案是使用Command Pattern。使用“execute”方法创建一个类似功能的对象数组,以执行所需的各种操作。使用接口进行抽象。

public interface Command { 

public void execute();

}

public class Foo implements Command{

public void execute() {

// do some stuff

}

}

您可以在具体的类或匿名内部类实现命令和遍历命令的数组:

List<Command> commandArray = new <Command>ArrayList(); 

commandArray.add(new Foo());

commandArray.add(new Command(){

public void execute() {

// some more stuff;

}

});

for (Command command : commandArray){

command.execute();

}

编辑:每阿德里安的评论,这里有一个方法,从调用的方法/命令

public interface StringCommand { 

public void execute(String value);

}

stringCommand = new StringCommand(){

public void execute(String value){

System.out.println(value.toLowerCase());

}

}

String[] stringAry = {"foo", "fu", "Whatever..."};

for(String value : stringAry){

stringCommand.execute(value);

}

会在红宝石类似于::

超过值的阵列的可变迭代

回答:

您可以像其他人所建议的那样使用反射。从语法上来说,它和你所期望的完全不同。

回答:

下一个版本的JDK-JDK7可能会有关闭支持。 如果你不想等待2011年秋季正式发布,你可以尝试betta版本。谷歌的Java/JDK 7.

以上是 是否可以使用变量调用方法? 的全部内容, 来源链接: utcz.com/qa/259836.html

回到顶部