Created
July 27, 2016 04:25
-
-
Save deyindra/ea74ebc93ddcc1a4be34e1d2423b78fe to your computer and use it in GitHub Desktop.
Java instanceOf implementation without using isInstance or isAssignableForm method
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public static <T> boolean instanceOf(T object, Class<?> clazz){ | |
if(object==null){ | |
return false; | |
}else{ | |
Class<?> baseClass = object.getClass(); | |
if (baseClass.isArray() && clazz.isArray()) { | |
return instanceOf(baseClass.getComponentType(), clazz.getComponentType()); | |
} else | |
return !(!baseClass.isArray() && clazz.isArray()) | |
&& !(baseClass.isArray() && !clazz.isArray()) | |
&& instanceOf(baseClass, clazz); | |
} | |
} | |
private static boolean instanceOf(Class<?> baseClass, Class<?> clazz){ | |
if(baseClass!=null && baseClass.equals(clazz)){ | |
return true; | |
}else{ | |
if(baseClass!=null) { | |
Set<Class<?>> classes = new HashSet<>(Arrays.asList(baseClass.getInterfaces())); | |
Class<?> superClass = baseClass.getSuperclass(); | |
if(superClass!=null){ | |
classes.add(superClass); | |
} | |
for (Class<?> vaClass : classes) { | |
if (instanceOf(vaClass, clazz)) { | |
return true; | |
} | |
} | |
} | |
return false; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment