public static <T extends Lexeme, L extends Lexicon<T>> L readFrom(final Class<L> lexiconClass, final Class<T> lexemeClass, final Reader reader) throws IOException { final List<T> lexemes = Lists.newArrayList(); final BufferedReader in = reader instanceof BufferedReader ? (BufferedReader) reader : new BufferedReader(reader); String line; while ((line = in.readLine()) != null) { T token = Lexeme.parse(lexemeClass, line); if (token == null) { continue; } lexemes.add(token); } return create(lexiconClass, lexemes); }