gpt4 book ai didi

java - 允许 Java 方法调用参数对象子类的方法?

转载 作者:行者123 更新时间:2023-11-29 06:14:17 26 4
gpt4 key购买 nike

我正在做一项小型大学作业。厌倦了写三行代码来添加按钮我写了一个小实用函数:

private JButton addButton(Container container, String text) {

JButton button = new JButton(text);
button.addActionListener(this);
container.add(button);

return button;
}

然后当然出现了添加文本字段的实用方法:

private JTextField addInput(Container container, int width) {

JTextField input = new JTextField(width);
input.addActionListener(this);
container.add(input);

return input;
}

如您所见,它们几乎完全相同。因此,我尝试通过一种功能强大的方法来减少行数,该方法可以将任何内容添加到任何其他内容。

private Component addComponent(Container container, Component component) {

component.addActionListener(this);
container.add(component);

return component;
}

现在,我必须承认,我开始认为这些超小实用函数可能有点荒谬。

但是,无论如何,我所有强大的 addComponent 方法都不起作用。而是提示 Component 没有 ActionListeners

我能看到的唯一方法是使用 MyJButtonMyJTextField,它们都继承自 MyComponent,后者有一个 addActionListener 方法。简单和消除重复的最初目标被抛到了窗外?

如何/应该如何做到这一点?我是 Java 和严格类型化的新手!

最佳答案

我会说您当前的方法(一堆类似的辅助方法)与您将获得的一样好。

有些事情是不雅的,您对此无能为力。

尝试组合这些方法的风险(按照@leonbloy 的回答)是您用运行时类型安全替换了静态类型安全;即 ClassCastExceptions 当类型转换失败时……或更糟。


从语言学的角度来看,应用程序需要一种方法来使用一个(或多个)额外方法“装饰”现有的类层次结构,并通过多态调度调用这些方法,就像您对普通实例所做的那样方法。

这可以使用装饰器模式来模拟,但它需要一些相当重量级的基础设施……如果类层次结构没有支持内置模式的钩子(Hook)。

关于java - 允许 Java 方法调用参数对象子类的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5691224/

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