小编Sco*_*ott的帖子

抛出接口中未定义的异常

当您需要抛出未在您正在实现的接口中定义的异常时,要遵循的最佳实践是什么?

这是一个例子:

public interface Reader
{
    public abstract void read() throws IOException;
}

public class CarrotReader implements Reader
{
    public void read() throws IOException {}
}

public class CupcakeReader implements Reader
{
    public void read() throws IOException, CupcakeException {}
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,您在阅读纸杯蛋糕时会发生特定的异常,因此您希望抛出与此相关的异常.但是,Reader没有在其界面中定义此类异常,那么您如何做?此外,将CupcakeException添加到Reader接口中的throws子句没有意义,因为这种类型的异常特定于CupcakeReader.解决这个问题的一种方法是让Reader定义read,使其抛出一些父类型,如Exception,但是你会丢失异常的上下文.在这种情况下你应该怎么做?谢谢!


已经提出的另一个有趣的情况涉及一个你无法控制的界面.在这种情况下,表明问题发生的最佳方法是什么?

为了便于说明,这是另一个例子:

public interface Reader
{
    public abstract void read();
}

public class CupcakeReader implements Reader
{
    public void read() throws CupcakeException {} …
Run Code Online (Sandbox Code Playgroud)

java interface exception throw

16
推荐指数
2
解决办法
1万
查看次数

Java DecimalFormat科学记数法问题

我正在使用Java的DecimalFormat类在Scientific Notation中打印出数字.但是,我有一个问题.无论价值如何,我都需要字符串固定长度,并且十次幂的符号将其抛弃.目前,这是我的格式:

DecimalFormat format = new DecimalFormat("0.0E0");
Run Code Online (Sandbox Code Playgroud)

这给了我以下组合:1.0E1,1.0E-1,-1.0E1和-1.0E-1.

我可以使用setPositivePrefix获取:+ 1.0E1,+ 1.0E-1,-1.0E1和-1.0E-1,或者我喜欢的任何东西,但它不会影响权力的标志!

有没有办法做到这一点,以便我可以有固定长度的字符串?谢谢!

编辑:啊,所以使用Java现有的DecimalFormat API 无法做到这一点?谢谢你的建议!我想我可能必须继承DecimalFormat,因为我受限于已经存在的接口.

java formatting scientific-notation decimal

5
推荐指数
2
解决办法
2万
查看次数

已检查或未检查的例外情况

可能重复:
何时选择已检查和未检查的异常

你好!

所以,关于何时抛出已检查或未经检查的异常,我仍然感到很自在.我想知道其他人认为在这种情况下最合适的东西:

class Correlation<T>
{
    private final T object1, object2;
    private final double correlationCoefficient;

    public Correlation(T object1, T object2, double correlationCoefficient)
    {
        if(Math.abs(correlationCoefficient) > 1.0 || (object1.equals(object2) && correlationCoefficient != 1.0))
            throw new IllegalArgumentException();

        this.object1 = object1;
        this.object2 = object2;
        this.correlationCoefficient = correlationCoefficient;
    }
}
Run Code Online (Sandbox Code Playgroud)

因此,在这种情况下,我想抛出一个运行时异常,因为我无法从用户传入错误数据的情况中轻松恢复.我想事先指出我无法控制传入的数据.如果可以,我会创建一个接口,保证构造函数中的条件为真.但是,这是已经计算出的相关性的便利类,因此我必须相信用户正在提供准确的信息.

好的,让我知道你们的想法!

java runtime exception checked-exceptions

3
推荐指数
1
解决办法
1902
查看次数