import java.io.Serializable; import java.util.ArrayList; import java.util.List; /** @noinspection UnusedDeclaration*/ class GenericsTest98 { public static void main(String[] args) throws Exception{ List> list = new ArrayList> (); Factory factory = Factory.newInstance(); // Doesn't compile, but Idea doesn't complain Mover mover = factory.getNew(list); } } abstract class Factory { public static Factory newInstance(){ return null; } // This should actually be // public abstract Mover getNew (List> source); public abstract Mover getNew (List> source); } /** @noinspection UnusedDeclaration*/ interface Movable extends Serializable { } /** @noinspection UnusedDeclaration*/ interface Mover { }