Auf Thema antworten

Hm, naja, bei so kurzen Ausdrücken ist das Geschmackssache, kann man tun, muss man nicht. Und eigentlich will man etwas leicht anderes, und zwar die Funktionalität zwischen dem try-catch abstrahieren. Angenommen wir bleiben bei deinem Beispiel und bekommen von irgendwoher einen FileWriter. Dann könnte die erste Maßnahme wie folgt aussehen:


[code=Java]

 public class IDontKnow {

        @FunctionalInterface

        private interface ConsumerWithEx<T> {

            void accept(T t) throws Exception;

        }


        FileWriter fwriter;


        private static <T> Consumer<T> toUnchecked(ConsumerWithEx<T> consumer){

            return (T arg) -> {

                try {

                    consumer.accept(arg);

                } catch (IOException e) {

                    throw new UncheckedIOException(e);

                } catch (Exception e) {

                    throw new RuntimeException(e);

                } catch (Throwable t){

                    throw t;

                }

            };

        }


        public IDontKnow() {

            Consumer<String> appendToFile = toUnchecked(fwriter::write);

            Arrays

                .stream(new String[]{"a", "b", "c", "d"})

                .forEach(appendToFile::accept);

        }

    }

[/code]


Und falls wirklich noch mehr hinzukommt als nur das Schreiben der Zeile, vll. eine Validierung etc. kann man dann so wie du eine weitere Methode einführen.


[code=Java]

        public IDontKnow() {

            //Consumer<String> appendToFile = toUnchecked(fwriter::write);

            Consumer<String> appendToFile = toUnchecked(this::appendToFile);

            Arrays

                .stream(new String[]{"a", "b", "c", "d"})

                .forEach(appendToFile::accept);

        }


        private void appendToFile(String text) throws IOException {

            //mach dies

            fwriter.write(text);

            //mach jenes

        }

[/code]


Aber man sieht das bei der Verwendung von Lambda-Ausdrücken darauf geachtet werden sollte das keine checked Exceptions verwendet werden, es ist einfach hakelig und unschön.



Oben