java - 动态地将方法体重新分配给对象

标签 java class dynamic methods overriding

是否可以让类 A 有一个空方法说 render().. 然后你创建类的 3 个实例,所以你有对象 b、c、d,那么我可以为每个对象的渲染方法分配主体吗?

这是一个例子,在 JavaScript 中你可以让一个对象说 a 然后在任何你可以说的地方

a.method = function() { /* do something */ }

在该行之后,您将拥有一个名为 method 的方法,用于对象 a 并且无论何时调用它都会 /* 做一些事情 */.

这在 Java 中可行吗?语法是什么?

我的想法是有一个 button 类,并在它使用的不同情况/上下文中为其实例的 click 方法分配不同的操作,所以我没有为每个 Action 定义不同的子类。

最佳答案

在 Java 中,您不能像在 Javascript 中那样传递函数。

您需要创建一个接口(interface),调用类似Handler 的东西(最好是更具描述性的东西!),它声明您想要的方法称呼。然后你可以做类似的事情:

a.method = function() { /* do something */ }

但你必须将其表述为

a.method = new Handler() {
    public void function() {
        /* do something */
    }
};

并将其称为a.method.function()

My idea is to have a button class and assign different actions to it's instance's click method inside the different situations / context it is used, so I don't have to define a different child class for each action.

Swing 正是这样做的。它通常看起来像这样:

myButton.setAction(new AbstractAction("Click me!") {
    public void actionPerformed() {
        // do something
    }
});

关于java - 动态地将方法体重新分配给对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10849963/

相关文章:

c++ - 如何在对象数组中打印对象的变量

java - Eclipse 中如何调用另一个项目的类?

c# - 运算符 '==' 与使用 DynamicExpression.ParseLambda<T, bool> 的操作数类型 'Guid' 和 'Guid' 不兼容

java - 如何更改微调器选择的文本

java - Object.wait() 超时

java - 我们也有包装类的对象池吗?

regex - 如何在Perl中将变量用作正则表达式修饰符?

java - 正确调用方法 "buildRoadOverlay"

c# - 高级安装程序损坏的注册表路径

sql - MySQL - 存储过程中的动态 SQL