gpt4 book ai didi

java - 有什么简单的方法可以将对象克隆到子类吗?

转载 作者:行者123 更新时间:2023-12-01 13:18:18 24 4
gpt4 key购买 nike

问题:有没有办法从 FocuseEvent 实例化 FocusInEvent ?因为我有几个这样的事件。(例如,MouseEvent 中的 MouseClickedEvent、KeyEvent 中的 KeyPressedEvent)

子类如下:

interface SwingExtendEvent
{}
class FocusInEvent extends FocusEvent implements SwingExtendEvent
{

public FocusInEvent(Component source, int id, boolean temporary,
Component opposite)
{
super(source, id, temporary, opposite);
}
}
class FocusOutEvent extends FocusEvent implements SwingExtendEvent
{

public FocusOutEvent(Component source, int id, boolean temporary,
Component opposite)
{
super(source, id, temporary, opposite);
}
}

我的解决方案:

public static <T extends FocusEvent & SwingExtendEvent> T event(Class<T> eventClass, FocusEvent e)
{
Constructor<T> constructor;
T o = null;
try
{
// Constructor
// (Component source, int id, boolean temporary,
// Component opposite)
constructor = eventClass.getConstructor(Component.class, int.class,boolean.class,
Component.class);
o = (T) constructor.newInstance(
e.getComponent(), e.getID(), e.isTemporary()
, e.getOppositeComponent());
} catch(Exception ex)
{
// 这里不应该出现异常 因为 实现的 类 都必须实现该构造函数
ex.printStackTrace();
}

return o;
}

编辑

我正在编写一个 Swing 事件适配器。监听器处理所有事件,然后发布到 guava EventBus。

我的听众的一部分

@Override
public void mouseWheelMoved(MouseWheelEvent e)
{
Events.trigger( emitter, e);
}

@Override
public void mouseDragged(MouseEvent e)
{
Events.trigger( emitter, SwingEvents.event(MouseDraggedEvent.class, e));
}

@Override
public void mouseMoved(MouseEvent e)
{
Events.trigger( emitter, SwingEvents.event(MouseEnteredEvent.class, e));
}

所以我可以通过以下方式处理每个事件

Events.on(component, new Function<MouseEnteredEvent, Void>()
{
public Void apply(MouseEnteredEvent e)
{
System.out.println("Mouse Entered");
return null;
}
});

顺便说一句,Events.on,Events.trigger 是我的 util 函数。

最佳答案

据我了解,您想要做的是控制对象实例化。因此,我会检查 factory method 各自的创建模式和 abstract factory .

如果您认为映射器适合您,您可以查看 Dozer项目。

希望我有帮助!

关于java - 有什么简单的方法可以将对象克隆到子类吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22279130/

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