gpt4 book ai didi

java - "One-time use methods"- 看起来更好,但更难阅读?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:09:27 24 4
gpt4 key购买 nike

我有一个构造函数,它需要为一个非常复杂的对象做很多设置。

许多此设置包括向此对象中的其他对象添加监听器,因此我的构造函数充满了样板匿名内部类方法描述。而且由于您需要全部实现它们,即使您不想使用它们,它们最终也会占用大量空间。示例:

     myTag.addMouseListener(new MouseListener()
{

public void mouseUp(MouseEvent e)
{
// do nothing
}

public void mouseDown(MouseEvent e)
{
myTag.setListVisible(true);
}

public void mouseDoubleClick(MouseEvent e)
{
// do nothing
}
});

这只是一堆废话(是的,我知道格式也很丑陋,但这是我们团队的风格,没有必要争论)。

我通过为这些一次性操作创建方法来解决这种丑陋问题,例如

addEventListeners()

诸如此类。但我觉得这些违背了方法应该是什么:模块化和可重用的代码,您可以制作通用的代码。相反,我得到了这些特定的一次性方法,它们之所以存在,是因为我不想让它们的主体内联。

您如何处理这种情况?我知道在这种情况下所有样板文件都是必要的邪恶,但我是将它们全部放在我的构造函数中,这是唯一需要它的地方,还是将它分解成方法,这些方法只使用一次且仅一次存在以隐藏难看的代码段?

编辑:需要说明的是,我的示例只是大量样板代码的一个症状。我现在肯定在使用适配器(感谢您的建议!)但我的问题最终是关于将一​​些代码从一个又长又忙的构造函数分解成零碎的代码是否有意义,即使它们只使用一次并且没有服务模块化目的,而不是将代码移出大构造函数以使其更具可读性。

最佳答案

为避免此类问题引入 Swing Adapters ,它们是监听器的空实现。所以不是

 myTag.addMouseListener(new MouseListener()
{

public void mouseUp(MouseEvent e)
{
// do nothing
}

public void mouseDown(MouseEvent e)
{
myTag.setListVisible(true);
}

public void mouseDoubleClick(MouseEvent e)
{
// do nothing
}
});

你可以简单地使用

 myTag.addMouseListener(new MouseAdapter()
{

//override only method you need
public void mouseDown(MouseEvent e)
{
myTag.setListVisible(true);
}

});

顺便说一句,适配器可以实现许多类似的接口(interface),比如 MouseAdapter 它是 MouseListenerMouseWheelListenerMouseMotionListener< 的空实现


如果你想知道是一个长方法还是几个短方法更好,即使它们只在一个地方使用,我也会选择很少的短一次,只是因为这样更容易阅读您的代码与正确命名的方法。另外(对很多人来说非常重要的一点)更小的方法更容易测试。

关于java - "One-time use methods"- 看起来更好,但更难阅读?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30877793/

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