java - 如何实现一个 Java 方法,它将根据调用类的名称调用另一个方法?

标签 java methods

我们有一个 Java 类 WebCenterGrid。此类充满了在网格中执行操作的方法,例如查找行、查找单元格值、对列进行排序。我们有几个使用这个类的类。使用它的类都引用不同的网格,但功能是相同的。

唯一不同的是如何创建网格。一些类进行填充网格的搜索(搜索也会刷新)。一些执行 updateList() 来更新网格等。

我想向 WebCenterGrid 添加一个方法来刷新网格。正如我所说,问题是每个方法都有不同的名称。

我想以某种方式将要调用的方法的名称传递给 WebCenterGrid 以进行刷新。我做了一些搜索,发现了一些我不太了解的关于 lambda 的内容。

我有一段时间没有使用 C++,但有一些方法可以将方法传递给那些方法。这个类是用 Java 而不是 C++ 编写的,但是有某种可以理解的等价物吗?

 public class WebCenterGrid {
    ....
    ....
    public void refresh(Method meth) {
           meth();
    }
 }

最佳答案

基本上,有两种方法。

一种是使用反射,这意味着:依赖运行时类型信息,通常从原始字符串派生。就像说:我有一些 X 类对象,我想在该对象上调用名为“doTheFoo()”的方法。

参见 here对于所有的荣耀细节。

稍微好一点的方法是使用MethodHandle 类,而不是“原始”反射方法类。参见 here用于 handle 。

但是:反射是在运行时发生的。你的代码编译得很好,但如果你有任何细节错误,它会在运行时崩溃。

因此我建议研究基于 Function 的 lambdas , 请参阅 here .

关于java - 如何实现一个 Java 方法,它将根据调用类的名称调用另一个方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54238719/

相关文章:

java - 升序冒泡排序 - 程序无法编译

java - 双向链表的排序方法

java - 向所有按钮添加相同的操作,但操作未应用于 Javafx 中的最后一个按钮

r - 如何在 R 中调用包含逗号的函数?

php - 在 codeigniter 中使用 required once 或在 helper 中创建一个函数哪个是安全的?

java - 如何运行另一个类的方法?

firefox - 带有socks v5代理的java runtime 6 - 可能吗?

java - 如何在不引起 CSS 警告的情况下在 JavaFX 2.2 中设置自定义控件的外观?

JAVA JDK1.9 java.security.NoSuchAlgorithmException : Unsupported secret key algorithm: DES

java - 如何从方法返回数组列表元素