编写自定义异常的最佳方法

约旦

我试图用3个构造函数编写一个自定义异常。我可以在3个不同的构造器中初始化最终变量吗?我收到编译错误。如何使此错误消除?

    public class CrifServiceFaultException extends RuntimeException {

        /**
         * 
         */
        private static final long serialVersionUID = 1L;

        public CrifServiceFaultException(String message) {  
// // - The blank final field errorDescription may not have been 
            super(message);
        }

        public CrifServiceFaultException(String processCode,
                String processDescription, String transformCode,
                String transformDescription) {  
// - The blank final field errorDescription may not have been 
     initialized
            super(processDescription + " " + transformDescription);
            this.processCode = processCode;
            this.processDescription = processDescription;
            this.transformCode = transformCode;
            this.transformDescription = transformDescription;
        }

        public CrifServiceFaultException(String errorCode, String errorDescription) {            // The blank final field transformDescription may not have been initialized

            super(errorDescription);
            setErrorCode(errorCode);
            setErrorDescription(errorDescription);
        }

        final private String processCode;
        final private String processDescription;
        final private String transformCode;
        final private String transformDescription;
        final private String errorCode;
        final private String errorDescription;
    // getters are here

    }
阿德里亚诺·雷佩蒂(Adriano Repetti)

因为根据Java规范每个最终变量都必须在构造函数结束之前初始化。

在每种情况下,对于每个构造函数,您都将其中一些未初始化(通常为空白)。简而言之,您必须为它们设置一个值(即使在特定的构造函数中未使用时):

public CrifServiceFaultException(String message)
{
    super(message);

    processCode = "";
    processDescription = "";
    transformCode= "";
    transformDescription= "";
    errorCode= "";
    errorDescription= "";
}

public CrifServiceFaultException(String processCode,
        String processDescription, String transformCode,
        String transformDescription)
{

    super(processDescription + " " + transformDescription);
    this.processCode = processCode;
    this.processDescription = processDescription;
    this.transformCode = transformCode;
    this.transformDescription = transformDescription;

    errorCode= "";
    errorDescription= "";
}

public CrifServiceFaultException(String errorCode, String errorDescription)
{
    super(errorDescription);
    setErrorCode(errorCode);
    setErrorDescription(errorDescription);

    processCode = "";
    processDescription = "";
    transformCode= "";
    transformDescription= "";
}

请注意,即使文档中也说明了这一点:

...声明变量final可作为有用的文档...

从这样的句子中,我们可以猜测到,这final仅仅是一种有用装饰,可以避免在编译时犯一些小错误(实际上与constC ++非常相似)。无论如何,IMO都不应该假设final变量是可变的(即使通过JNI),因为它们可以在运行时实现强大的优化(我在特别考虑HotSpot):考虑并发访问和缓存一致性(尤其是对于原始类型)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

编写自定义异常的最佳方法

来自分类Dev

用Java编写自定义异常名称的最佳方法

来自分类Dev

用Java编写自定义异常名称的最佳方法

来自分类Dev

使用异常或自定义类在Java中的两层之间进行通信的最佳方法

来自分类Dev

自定义动作栏的最佳方法

来自分类Dev

解析自定义Filtersyntax的最佳方法

来自分类Dev

创建自定义查找的最佳方法

来自分类Dev

关于用Java编写自定义类异常

来自分类Dev

定义自定义授权策略的最佳方法

来自分类Dev

编写自定义IRB

来自分类Dev

编写自定义方法和自定义过滤器有什么区别?

来自分类Dev

如何使用用户定义的字段编写自定义异常?

来自分类Dev

在Swift中编写自定义访问器方法

来自分类Dev

如何编写自定义Java中铸造方法

来自分类Dev

负责编写自定义扩展方法 .Add、.Remove 等

来自分类Dev

从自定义UITableViewCell操作UIImagePickerController的最佳方法

来自分类Dev

进行自定义排序的最佳方法是什么?

来自分类Dev

GWT:制作自定义ListBox的最佳方法是什么

来自分类Dev

什么是在WPF中自定义绑定文本的最佳方法

来自分类Dev

自定义Bootstrap的最佳方法是什么

来自分类Dev

创建自定义android按钮的最佳方法

来自分类Dev

自定义UITableViewCell异常

来自分类Dev

自定义异常-Java

来自分类Dev

自定义光标异常?

来自分类Dev

自定义Zuul异常

来自分类Dev

自定义异常的问题

来自分类Dev

自定义异常处理

来自分类Dev

是否可以从assert方法引发自定义异常?

来自分类Dev

@ExceptionHandler注释方法不处理自定义异常