gpt4 book ai didi

java - 在 Java 中神奇地调用方法

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:07:06 25 4
gpt4 key购买 nike

在 Java 中是否有某种方法可以像在 PHP 中那样使用 __call 来使用魔术方法?

例如:

 class foo {
@Setter @Getter
int id;

@Getter
Map <String, ClassInFoo> myMap;

protected class ClassInFoo {
@Setter @Getter
String name;
}

@Setter
String defaultKey;
}

我正在使用 Project Lombok getter 和 setter 方法的注释以简化代码。

让我们考虑一下,我的 map 包含多个由 String 映射的项目,并且 defaultKey 定义了默认项目。

我想要的是能够调用 foo.getName(),它将返回默认名称 foo.myMap.get(defaultKey).getName().

我不能只手动编写所有 getter 的原因是 Foo 类实际上是用泛型继承的,内部类可能不同。

我有点需要这样的东西:

   function Object __call(method) {
if (exist_method(this.method)
return this.method();
else
return this.myMap.get(defaultKey).method();
}

这在 Java 中有可能吗?

编辑:

我在这里做了一个更精确的例子来说明我想要实现的目标:https://gist.github.com/1864457

这样做的唯一原因是为了“速记”内部类中的方法。

最佳答案

你绝对可以通过reflection通过使用它的功能,例如

public Method getMethod(String name, Class<?>... parameterTypes)

可以用来查看一个类是否定义了某些方法,但我不明白如何通过正确使用接口(interface)、继承和重写方法来解决您的问题

提供反射等功能来管理某些无法解决的问题,但 Java 不是 PHP,因此您应该尽可能避免使用它,因为它不属于该语言的哲学

关于java - 在 Java 中神奇地调用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9350180/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com