|
|
@@ -57,6 +57,11 @@ public final class ClassUtils {
|
|
|
public static <T> Function<Object, Optional<T>> cast(Class<T> type) {
|
|
|
return value -> cast(type, value);
|
|
|
}
|
|
|
+
|
|
|
+ @SuppressWarnings({"rawtypes", "unchecked"})
|
|
|
+ public static <T> Optional<Class<? extends T>> asSubclass(Class<T> target, Class<?> source) {
|
|
|
+ return (Optional)Optional.ofNullable(source).filter(target::isAssignableFrom);
|
|
|
+ }
|
|
|
|
|
|
public static IClass<?> box(IClass<?> ic) {
|
|
|
return ic.attributes().has(IAttribute.PRIMITIVE) ? IClass.typeinfo(box(ic.raw())) : ic;
|
|
|
@@ -153,8 +158,12 @@ public final class ClassUtils {
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
- public static Class<?> forName(String type) throws ClassNotFoundException {
|
|
|
- return Class.forName(type, true, loader());
|
|
|
+ public static Optional<Class<?>> forName(String type) {
|
|
|
+ try {
|
|
|
+ return Optional.of(Class.forName(type, true, loader()));
|
|
|
+ } catch (ClassNotFoundException cause) {
|
|
|
+ return Optional.empty();
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
public static ClassLoader loader() {
|