Get object in a Set that is an instance of a generically specified type Are there ways to simplify the getLoadComponent(Class&lt;T&gt; type) method? The call LoadComponentFX lcfx = l.getLoadComponent(LoadComponentFX.class); seams a bit clumsy to me.

Here is my code:

public abstract class LoadComponent {}

public class LoadComponentFX extends LoadComponent {}

public class Load {
    Set&lt;LoadComponent&gt; lc;

    public &lt;T extends LoadComponent&gt; T getLoadComponent(Class&lt;T&gt; type) {
        for (final LoadComponent l : lc) {
            if (type.isInstance(l)) {
                return (T) l;
            }
        }
        return null;
    }
}


Test code:

public class LoadTest {
    public static void main(final String[] args) {
        Load l = new PointLoad();

        LoadComponentFX lcfx = l.getLoadComponent(LoadComponentFX.class);
    }
}
As your current code now indirectly forces the set to only contain one of each component, then you could use a Map instead. This would also reduce the need for the loop

public class Load {
    Map&lt;Class&lt;? extends LoadComponent&gt;, LoadComponent&gt; lc;

    public &lt;T extends LoadComponent&gt; T getLoadComponent(Class&lt;T&gt; type) {
        return (T) lc.get(type);
    }
}


Other comments:


Make sure the Map is set to private final
lc is not a good name. There's really no need to save bytes by shortening variable names. A better name would be loadComponents
When adding items to the map, you can use loadComponents.put(obj.getClass(), obj);