微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Java继承,使用构建器模式

各位晚上好,

我有3个班:

>错误
> ShellError
> WebError

哪里

ShellError extends Error

WebError extends Error

在ShellError中有一些字段是可选的,其他字段是必需的.我以下列方式构建对象:

shellError = new ShellError.Builder().setFile(filePattern)
.setHost(host).setPath(path).setSource(file.isSource())
.setJobName(p.getJobName()).build();

由于ShellError扩展了错误,我进一步说:

shellError.setDescription(msg.toString());
shellError.setExceptionClass("MyEvilException");
shellError.setExceptionMessage("Some cLever error message");
shellError.setStacktrace(stack);

那么为什么要打造Builder?我喜欢我的build()等等方便地验证所有字段设置正确的事实

我会喜欢它,如果我可以..构建()ShellError并添加它从错误类的字段.

我做了什么工作

>问题是:

有没有更好的方法,还是有意义我做了什么?

– 编辑

我更新了Builder()来接受以前的Error类中的一些参数.我现在有

shellError = new ShellError.Builder(exception,"Some description").setFile(filePattern).setHost(host)
.setPath(path).setSource(file.isSource()).
setJobName(p.getJobName()).build();

你说什么?更好?更差?

解决方法

根据您参考的功能,这显然不是标准的 java.lang.Error课程.通常构建器用于允许容易地构造不可变对象,或者在存在大量配置/构造参数的情况下提供类似于“命名参数”的功能.

对于这种特殊情况,如果Error类在构造之后是不可变的,并且这些附加的setter函数是在构建器而不是错误类上的话,这将是更明智的.我不知道你对这些类有多少控制权,但如果可以修改它们,我建议先让构建器支持相同的设置器,这样可以在构建器上进行所有配置.那么,如果这样做是可行的,你可以尝试删除这些setter方法,而不是从构造函数中配置这些方法.如果您没有任何控制权,您可以扩展构建器类,另一个支持这些附加方法.

你做的是有道理的似乎构建器和错误类的设计不一定会有很大的意义,迫使您编写感觉不合适或不一致的代码.

原文地址:https://www.jb51.cc/java/126789.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐