gpt4 book ai didi

仅用于副作用的 Java 构造函数

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:56:54 26 4
gpt4 key购买 nike

我有一个 Java 实例类“ResultMaker”,它的存在只是为了产生副作用(发送电子邮件),并且该对象以后再也不会被使用。 (当然这可以重写,使 ResultMaker 成为一个静态类,但是当我向类添加“肉体”、添加方法并创建多个实例时,我想我最终会想要引用该对象,所以我在此阶段将 ResultMaker 声明为实例类的理由是代码尚未完成。)

为了清除 r 未使用的 Java 警告(参见简短的示例代码),我删除了对变量 r 的赋值(参见代码),所以我只剩下一个 new ResultMaker(ans)。随着代码更改,副作用不再发生,所以我猜 ResultMaker 的实例化不再发生。这是值得编译器警告(没有实例化)还是这是 Java 的一个众所周知的方面?

    public void doPost(HttpServletRequest req, HttpServletResponse resp)
throws IOException, ServletException
{
Thing tt = new Thing();
String answer = tt.DoSomething();

ResultMaker r = new ResultMaker(answer);

resp.getWriter().println(answer);
}

最佳答案

我怀疑您并没有真正看到您认为自己看到的东西。我非常非常怀疑构造函数调用是否已被删除。如果您可以提供一个简短但完整的程序来演示问题,那会有所帮助 - 但我怀疑您会发现它是一些其他变化 - 可能是您观察副作用的方式 - 即发生了。

我强烈建议您将其设为一个静态方法,它描述了您所期望的副作用 - 一个实际上不使用结果的构造函数调用很奇怪,我不会惊讶地看到维护者删除调用 expecting 它是一个空操作。构造函数的目的应该是构造一个对象,而不是为了产生副作用。

编辑:如果您的代码实际上是那样的,那么我要做的第一就是更改这些空的异常 block :

catch (UnsupportedEncodingException e)
{
}
catch (AddressException e)
{
}
catch (MessagingException e)
{
}

至少这些应该记录出了什么问题。

出于调查目的,我还会在构造函数调用前后以及构造函数内添加日志记录。这应该有助于显示执行的实际流程。

关于仅用于副作用的 Java 构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5367523/

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