forked from Clones/Controlify
✏️ Improve screen processor factory
This commit is contained in:
@ -8,7 +8,7 @@ import java.util.function.Function;
|
|||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public final class ScreenProcessorFactory {
|
public final class ScreenProcessorFactory {
|
||||||
private static final Map<Class<? extends Screen>, Function<Screen, ScreenProcessor<?>>> factories = new HashMap<>();
|
private static final Map<Class<? extends Screen>, Factory<?>> factories = new HashMap<>();
|
||||||
|
|
||||||
private ScreenProcessorFactory() {
|
private ScreenProcessorFactory() {
|
||||||
}
|
}
|
||||||
@ -19,14 +19,17 @@ public final class ScreenProcessorFactory {
|
|||||||
screenClass = (Class<? extends Screen>) screenClass.getSuperclass();
|
screenClass = (Class<? extends Screen>) screenClass.getSuperclass();
|
||||||
}
|
}
|
||||||
|
|
||||||
return (ScreenProcessor<T>) factories.getOrDefault(screenClass, ScreenProcessorFactory::createDefault).apply(screen);
|
return ((Factory<T>) factories.getOrDefault(screenClass, ScreenProcessorFactory::createDefault)).apply(screen);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static <T extends Screen> void registerProvider(Class<T> screenClass, Function<T, ScreenProcessor<? super T>> factory) {
|
public static <T extends Screen> void registerProvider(Class<T> screenClass, Factory<T> factory) {
|
||||||
factories.put(screenClass, (Function<Screen, ScreenProcessor<?>>) factory);
|
factories.put(screenClass, factory);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static <T extends Screen> ScreenProcessor<T> createDefault(T screen) {
|
private static <T extends Screen> ScreenProcessor<T> createDefault(T screen) {
|
||||||
return new ScreenProcessor<>(screen);
|
return new ScreenProcessor<>(screen);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public interface Factory<T extends Screen> extends Function<T, ScreenProcessor<? super T>> {
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -12,7 +12,7 @@ public interface ScreenProcessorProvider {
|
|||||||
return ((ScreenProcessorProvider) screen).screenProcessor();
|
return ((ScreenProcessorProvider) screen).screenProcessor();
|
||||||
}
|
}
|
||||||
|
|
||||||
static <T extends Screen> void registerProvider(@NotNull Class<T> screenClass, @NotNull Function<T, ScreenProcessor<? super T>> factory) {
|
static <T extends Screen> void registerProvider(@NotNull Class<T> screenClass, @NotNull ScreenProcessorFactory.Factory<T> factory) {
|
||||||
ScreenProcessorFactory.registerProvider(screenClass, factory);
|
ScreenProcessorFactory.registerProvider(screenClass, factory);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user