[
https://issues.apache.org/jira/browse/LANG-500?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12703994#action_12703994
]
Joerg Schaible commented on LANG-500:
-------------------------------------
You might improve this even more:
{code}
public static List<Class<?>> getAllInterfaces(Class<?> clazz)
{
if (clazz == null)
{
return null;
}
Map<Class<?>, Object> interfacesMap = new LinkedHashMap<Class<?>,
Object>();
getAllInterfaces(clazz, interfacesMap);
return new ArrayList<Class<?>>(interfacesMap.getKeys());
}
private static void getAllInterfaces(Class<?> clazz, Map<Class<?>, Object>
interfacesMap)
{
while (clazz != Object.class)
{
Class<?>[] interfaces = clazz.getInterfaces();
for (Class<?> i : interfaces)
{
if (!interfacesMap.put(i, null))
{
getAllInterfaces(i, interfacesMap);
}
}
clazz = clazz.getSuperclass();
}
}
{code}
Remember, the HasSet is using a HashMap internally anyway ...
However, as always with "more efficient" implementations: It would actually be
nice to have some numbers from a real profiler.
> ClassUtils.getAllInterfaces(...) could be more efficient
> --------------------------------------------------------
>
> Key: LANG-500
> URL: https://issues.apache.org/jira/browse/LANG-500
> Project: Commons Lang
> Issue Type: Improvement
> Affects Versions: 3.x
> Reporter: Pino Silvaggio
> Priority: Trivial
>
> This could seem like a very minor thing but why not improve
> the code once in a while...
> Something like this could replace the current inefficient code:
> {code}
> public static List<Class<?>> getAllInterfaces(Class<?> clazz)
> {
> if (clazz == null)
> {
> return null;
> }
> HashSet<Class<?>> interfacesSet = new HashSet<Class<?>>();
> LinkedList<Class<?>> interfacesList = new LinkedList<Class<?>>();
> getAllInterfaces(clazz, interfacesSet, interfacesList);
> return interfacesList;
> }
> private static void getAllInterfaces(
> Class<?> clazz,
> HashSet<Class<?>> interfacesSet, List<Class<?>> interfacesList)
> {
> while (clazz != null)
> {
> Class<?>[] interfaces = clazz.getInterfaces();
> for (Class<?> i : interfaces)
> {
> if (!interfacesSet.add(i))
> {
> interfacesList.add(i);
> getAllInterfaces(i, interfacesSet, interfacesList);
> }
> }
> clazz = clazz.getSuperclass();
> }
> }
> {code}
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.