Allow throwing original checked exception instead of wrapping unchecked exception.

Use case: https://github.com/spring-projects/spring-boot/blob/23fe3977d2d319f9f1bd0101f40dbb639ade7082/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/type/classreading/ConcurrentReferenceCachingMetadataReaderFactory.java#L71-L89

    @Override
    public MetadataReader getMetadataReader(String className) throws IOException {
        MetadataReader metadataReader = this.classNameCache.get(className);
        if (metadataReader == null) {
            metadataReader = super.getMetadataReader(className);
            this.classNameCache.put(className, metadataReader);
        }
        return metadataReader;
    }

    @Override
    public MetadataReader getMetadataReader(Resource resource) throws IOException {
        MetadataReader metadataReader = this.resourceCache.get(resource);
        if (metadataReader == null) {
            metadataReader = createMetadataReader(resource);
            this.resourceCache.put(resource, metadataReader);
        }
        return metadataReader;
    }

can be rewritten to:

    @Override
    public MetadataReader getMetadataReader(String className) throws IOException {
        return this.classNameCache.computeIfAbsent(className,ThrowingFunction.of((ThrowingFunction<String, MetadataReader>)super::getMetadataReader).checked());
    }

    @Override
    public MetadataReader getMetadataReader(Resource resource) throws IOException {
        return this.resourceCache.computeIfAbsent(resource,ThrowingFunction.of(this::createMetadataReader).checked());
    }

WDYT @philwebb

Comment From: philwebb

Personally, I'm not so keen on the (somewhat) hack that's being used to throw the checked exception from a signature that doesn't expose one.

@SuppressWarnings ("unchecked")
static <E extends Throwable> void throwAsUnchecked(Exception exception) throws E {
    throw (E) exception;
}

I think it somewhat goes against the spirit of the design.

Comment From: snicoll

Yeah I agree.

@quaff thanks for the suggestion, in any case.