2016-12-01 5 views
1

Щас безопасно приобретать text из файла ресурсов (надлежащее исключение вместо NPE) нужно использовать следующий фрагмент кода:Исключения вместо нуля при чтении ресурса в Groovy

String resourceText(String resourcePath) { 
    URL resource = this.getClass().getResource(resourcePath) 
    if (!resource) { 
     throw new IllegalArgumentException("No file at $resourcePath") 
    } 
    resource.text 
} 

Есть ли библиотека что уже делает именно это? Похоже, что ресурсы всегда должны быть доступны в таком null - безопасном способе.

+0

Почему не: 'ресурс .text' или' Optional.ofNullable (ресурс) '? – Opal

+0

Я сам нашел лучший способ, я сейчас отвечу. Спасибо в любом случае :) –

ответ

1

Чтобы избежать NPE вы можете использовать safe navigation operator, возвращаемое значение будет оцениваться в нуль:

String resourceText(String resourcePath) { 
    URL resource = this.getClass().getResource(resourcePath) 
    resource?.text 
} 

Гораздо лучше вариант заключается в использовании: УСТРОЙСТВА

String resourceText(String resourcePath) { 
    URL resource = this.getClass().getResource(resourcePath) 
    Optional.ofNullable(resource).orElseThrow(() -> new IllegalArgumentException("No file at $resourcePath")).text 
} 
+0

Первый фрагмент - это именно то, чего я хочу избежать (я не хочу возвращать нуль), а второй хороший, но не намного короче и использует возможности Java 8. Было бы неплохо иметь что-то для Java 7. –

0

Я обнаружил, что с помощью Guava метод может быть намного короче:

String resourceText(String resourcePath) { 
    Resources.getResource(this.class, resourcePath).text 
} 

От его Javadoc:

@throws IllegalArgumentException if the resource is not found

+0

Гуава под капотом делает то же самое! Кажется бессмысленным добавить целую зависимость, даже не заменяя 5 строк кода. – Opal

+0

Конечно, но в большинстве проектов я работаю с Guava, добавлен в любом случае. Кроме того, эти 5 строк кода, дублированных в десятки раз по всему проекту, вероятно, будут просить об извлечении отдельного класса/утилиты (по крайней мере, для унификации сообщений об ошибках), и вам нужно будет делать это отдельно для каждого проекта. Используя Guava, вы можете иметь единый способ доступа к ресурсам во всех проектах, над которыми вы работаете, без особого размышления. –