diff --git a/src/main/java/qupath/ext/imglib2/ImgCreator.java b/src/main/java/qupath/ext/imglib2/ImgCreator.java index 710dfff..9ea7756 100644 --- a/src/main/java/qupath/ext/imglib2/ImgCreator.java +++ b/src/main/java/qupath/ext/imglib2/ImgCreator.java @@ -77,8 +77,9 @@ private ImgCreator(Builder builder, Function cellCreator) { * @return a builder to create an instance of this class * @throws IllegalArgumentException if the provided image has less than one channel */ - public static Builder builder(ImageServer server) { - return new Builder<>(server); + public static & NumericType> Builder builder(ImageServer server) { + // Despite the potential warning, T is necessary, otherwise a cannot infer type arguments error occurs + return new Builder(server, getTypeOfServer(server)); } /** @@ -236,10 +237,6 @@ public static class Builder & NumericType> { private final T type; private CellCache cellCache = defaultCellCache; - private Builder(ImageServer server) { - this(server, getTypeOfServer(server)); - } - private Builder(ImageServer server, T type) { checkType(server, type); if (server.nChannels() <= 0) { @@ -282,24 +279,6 @@ public Builder cellCache(CellCache cellCache) { } } - @SuppressWarnings("unchecked") - private static & NumericType> T getTypeOfServer(ImageServer server) { - if (server.isRGB()) { - return (T) new ARGBType(); - } - - return switch (server.getPixelType()) { - case UINT8 -> (T) new UnsignedByteType(); - case INT8 -> (T) new ByteType(); - case UINT16 -> (T) new UnsignedShortType(); - case INT16 -> (T) new ShortType(); - case UINT32 -> (T) new UnsignedIntType(); - case INT32 -> (T) new IntType(); - case FLOAT32 -> (T) new FloatType(); - case FLOAT64 -> (T) new DoubleType(); - }; - } - private static void checkType(ImageServer server, T type) { if (server.isRGB()) { if (!(type instanceof ARGBType)) { @@ -379,6 +358,24 @@ private static void checkType(ImageServer server, T type) { } } + @SuppressWarnings("unchecked") + private static & NumericType> T getTypeOfServer(ImageServer server) { + if (server.isRGB()) { + return (T) new ARGBType(); + } + + return switch (server.getPixelType()) { + case UINT8 -> (T) new UnsignedByteType(); + case INT8 -> (T) new ByteType(); + case UINT16 -> (T) new UnsignedShortType(); + case INT16 -> (T) new ShortType(); + case UINT32 -> (T) new UnsignedIntType(); + case INT32 -> (T) new IntType(); + case FLOAT32 -> (T) new FloatType(); + case FLOAT64 -> (T) new DoubleType(); + }; + } + private Cell createCell(TileRequest tile) { BufferedImage image; try {