diff --git a/src/main/java/htsjdk/samtools/SamInputResource.java b/src/main/java/htsjdk/samtools/SamInputResource.java index 13ecf5dfd..d76694eeb 100644 --- a/src/main/java/htsjdk/samtools/SamInputResource.java +++ b/src/main/java/htsjdk/samtools/SamInputResource.java @@ -44,6 +44,7 @@ import java.nio.file.Path; import java.nio.file.Paths; import java.util.function.Function; +import java.util.function.Supplier; /** * Describes a SAM-like resource, including its data (where the records are), and optionally an index. @@ -223,9 +224,9 @@ public String toString() { class FileInputResource extends InputResource { final File fileResource; - final Lazy lazySeekableStream = new Lazy(new Lazy.LazyInitializer() { + final Lazy lazySeekableStream = new Lazy<>(new Supplier() { @Override - public SeekableStream make() { + public SeekableStream get() { try { return new SeekableFileStream(fileResource); } catch (final FileNotFoundException e) { @@ -279,9 +280,9 @@ public SRAAccession asSRAAccession() { final Path pathResource; final Function wrapper; - final Lazy lazySeekableStream = new Lazy(new Lazy.LazyInitializer() { + final Lazy lazySeekableStream = new Lazy<>(new Supplier() { @Override - public SeekableStream make() { + public SeekableStream get() { try { return new SeekablePathStream(pathResource, wrapper); } catch (final IOException e) { @@ -344,9 +345,9 @@ public SRAAccession asSRAAccession() { class UrlInputResource extends InputResource { final URL urlResource; - final Lazy lazySeekableStream = new Lazy(new Lazy.LazyInitializer() { + final Lazy lazySeekableStream = new Lazy<>(new Supplier() { @Override - public SeekableStream make() { + public SeekableStream get() { try { return SeekableStreamFactory.getInstance().getStreamFor(urlResource); } catch (final IOException ioe) { throw new RuntimeIOException(ioe); } } diff --git a/src/main/java/htsjdk/samtools/util/Lazy.java b/src/main/java/htsjdk/samtools/util/Lazy.java index 13726b878..fca53a6a2 100644 --- a/src/main/java/htsjdk/samtools/util/Lazy.java +++ b/src/main/java/htsjdk/samtools/util/Lazy.java @@ -1,5 +1,7 @@ package htsjdk.samtools.util; +import java.util.function.Supplier; + /** * Simple utility for building an on-demand (lazy) object-initializer. * @@ -9,29 +11,36 @@ * @author mccowan */ public class Lazy { - private final LazyInitializer initializer; + private final Supplier initializer; private boolean isInitialized = false; private T instance; - /** Simple cons */ - public Lazy(final LazyInitializer initializer) { + public Lazy(final Supplier initializer) { this.initializer = initializer; } /** Returns the instance associated with this {@link Lazy}, initializing it if necessary. */ public synchronized T get() { if (!isInitialized) { - this.instance = initializer.make(); + this.instance = initializer.get(); isInitialized = true; } return instance; } - /** Describes how to build the instance of the lazy object. */ + /** Describes how to build the instance of the lazy object. + * @deprecated since 1/2017 use a {@link Supplier} instead + * */ @FunctionalInterface - public interface LazyInitializer { + @Deprecated + public interface LazyInitializer extends Supplier { /** Returns the desired object instance. */ T make(); + + @Override + default T get(){ + return make(); + } } public boolean isInitialized() { diff --git a/src/main/java/htsjdk/variant/variantcontext/VariantContextUtils.java b/src/main/java/htsjdk/variant/variantcontext/VariantContextUtils.java index face55bb9..6988b4c8e 100644 --- a/src/main/java/htsjdk/variant/variantcontext/VariantContextUtils.java +++ b/src/main/java/htsjdk/variant/variantcontext/VariantContextUtils.java @@ -52,15 +52,12 @@ /** Use a {@link Lazy} {@link JexlEngine} instance to avoid class-loading issues. (Applications that access this class are otherwise * forced to build a {@link JexlEngine} instance, which depends on some apache logging libraries that mightn't be packaged.) */ - final public static Lazy engine = new Lazy(new Lazy.LazyInitializer() { - @Override - public JexlEngine make() { - final JexlEngine jexl = new JexlEngine(); - jexl.setSilent(false); // will throw errors now for selects that don't evaluate properly - jexl.setLenient(false); - jexl.setDebug(false); - return jexl; - } + final public static Lazy engine = new Lazy<>(() -> { + final JexlEngine jexl = new JexlEngine(); + jexl.setSilent(false); // will throw errors now for selects that don't evaluate properly + jexl.setLenient(false); + jexl.setDebug(false); + return jexl; }); private final static boolean ASSUME_MISSING_FIELDS_ARE_STRINGS = false;