0
  1. メソッドprocessExceptions() は、メソッドを呼び出してBEAN.methodThrowExceptions例外を処理する必要があります。

1.1。例外FileSystemExceptionが発生した場合は、メソッドを呼び出してログに記録し、BEAN.log前方にスローします

1.2. 例外CharConversionExceptionまたはその他IOExceptionが発生した場合は、メソッドを呼び出してログに記録するだけですBEAN.log

  1. 2.1 で転送する例外のクラス/タイプを追加します。メソッドのprocessExceptions()署名に。

  2. メソッド内の残りの例外を処理し、main()ログに記録します。使用するtry..catch

さまざまな解決策を試しました。動作しますが、本来の動作ではありません。throwsin メソッドの正しい配置は何ですか。それとも、まったく使用すべきではないのでしょうか? そして置いておかないと使えないthrow。助けてください、私は本当にあなたの時間を感謝します.

public class Solution {

    public static StatelessBean BEAN = new StatelessBean();

    public static void main(String[] args) {
        try{
            processExceptions();
        }
        catch (CharConversionException e){
            BEAN.log(e);
        }
    }


    public static void processExceptions()throws CharConversionException {
        try{
            BEAN.methodThrowExceptions();
        }
        catch (CharConversionException e){
            BEAN.log(e);
            throw e;
        }
        catch (FileSystemException e){
            BEAN.log(e);
        }
        catch (IOException e){
            BEAN.log(e);
        }
    }

    public static class StatelessBean {
        public void log(Exception exception) {
            System.out.println(exception.getMessage() + ", " + exception.getClass().getSimpleName());
        }

        public void methodThrowExceptions() throws CharConversionException, FileSystemException, IOException {
            int i = (int) (Math.random() * 3);
            if (i == 0)
                throw new CharConversionException();
            if (i == 1)
                throw new FileSystemException("");
            if (i == 2)
                throw new IOException();
        }
    }
}
4

2 に答える 2

0

メソッドが RuntimeException ではない例外をスローできる場合 (直接スローするか、例外をスローできるメソッドを呼び出す)、例外を処理するか、例外をスローすることを宣言する必要があります。メソッドは、例外が発生する可能性があることを認識し、それを処理するか、スローすることを宣言できます (など)。

チェックされた例外を扱っているため、スローの宣言を回避する明確な方法はありませんが、(厄介な) 回避策があります。例外を RuntimeException でラップしてスローすることができます。それを処理したい場合は、re.getCause(); から実際の例外を取得できます。

public class Solution {

    public static StatelessBean BEAN = new StatelessBean();

    public static void main(String[] args) {
        try{
            processExceptions();
        }
        catch (RuntimeException re){
            if (!(re.getCause() instanceof CharConversationException)) {
                //handle the case in which the exception was not CCE and not FSE not IOException
            }
        }
    }


    public static void processExceptions() {
        try{
            BEAN.methodThrowExceptions();
        } catch (CharConversionException cce){
            BEAN.log(e);
            throw new RuntimeException(cce);
        } catch (FileSystemException fse){
            BEAN.log(e);
        } catch (IOException e){
            BEAN.log(e);
        }
    }

    public static class StatelessBean {
        public void log(Exception exception) {
            System.out.println(exception.getMessage() + ", " + exception.getClass().getSimpleName());
        }

        public void methodThrowExceptions() throws CharConversionException, FileSystemException, IOException {
            int i = (int) (Math.random() * 3);
            if (i == 0)
                throw new CharConversionException();
            if (i == 1)
                throw new FileSystemException("");
            if (i == 2)
                throw new IOException();
        }
    }
}

私はあなたの質問を正しく理解したかどうかわかりませんが、これはあなたが望んでいたものです:)

于 2014-02-28T11:34:48.377 に答える