Buggy code:
public class JDBCTmpl implements Closeable { final Function < AbstractRecord , ResultSet > _default_rm = ( ResultSet rs ) -> { AbstractRecord ret = Record . newValue ( . class ) ; try { ResultSetMetaData metaData = rs . getMetaData ( ) ; int cnt = metaData . getColumnCount ( ) ; String mainTableName = metaData . getTableName ( 1 ) ; ret . table ( mainTableName ) ; for ( int i = 0 ; i < cnt ; i ++ ) { String className = metaData . getColumnClassName ( ( i + 1 ) ) ; String retTable = metaData . getTableName ( ( i + 1 ) ) ; Class < ? > type = . class ; try { type = Class . forName ( className ) ; } catch ( e ) { e . printStackTrace ( ) ; } String colName = metaData . getColumnName ( ( i + 1 ) ) ; Object val ; if ( ( type . equals ( . class ) ) || ( type . equals ( . class ) ) ) { val = rs . getBinaryStream ( ( i + 1 ) ) ; } else { val = JDBCOper . normalizeValue ( rs . getObject ( ( i + 1 ) , type ) ) ; } if ( mainTableName . equals ( retTable ) ) ret . set ( colName , val ) ; else ret . setInner ( retTable , colName , val ) ; } } catch ( e ) { S . _lazyThrow ( e ) ; } return ret ; } ; static Logger logger = LoggerFactory . getLogger ( JDBCTmpl . class ) ; final Function < Integer , ResultSet > counter = ( rs ) -> { try { return ( ( Integer ) ( rs . getInt ( 1 ) ) ) ; } catch ( e ) { e . printStackTrace ( ) ; } return 0 ; } ; protected JDBCOper oper ; public JDBCTmpl ( JDBCOper oper ) { } public List < Record > find ( String sql , String ... x ) { } public List < Record > find ( String sql ) { } @ SuppressWarnings ( "unchecked" ) public < R extends Record > List < R > map ( R proto , String sql , Object ... x ) { } @ SuppressWarnings ( "unchecked" ) public < R extends Record > List < R > map ( Class < R > clazz , String sql , Object ... x ) { } public int count ( String sql , Object [ ] params ) { } public int count ( Tuple < String , Object [ ] > mix ) { } public < R > List < R > map ( Function < ? , ResultSet > mapper , Tuple < String , Object [ ] > mix ) { } @ SuppressWarnings ( "unchecked" ) public < R > List < R > map ( Function < ? , ResultSet > mapper , String sql , Object ... x ) { } public void tx ( Callback < JDBCTmpl > ... callback ) { } public void tx ( String ... batch ) { } public int exec ( String sql ) { } public int exec ( String sql , Object [ ] params , int [ ] types ) { } public int exec ( String sql , Object ... params ) { try { int [ ] types = new int [ params . length ] ; for ( int i = 0 ; i < ( params . length ) ; i ++ ) { Object o = params [ i ] ; if ( o == null ) throw new IllegalArgumentException ( "Do<seq2seq4repair_space>not<seq2seq4repair_space>use<seq2seq4repair_space>null<seq2seq4repair_space>values<seq2seq4repair_space>without<seq2seq4repair_space>specify<seq2seq4repair_space>its<seq2seq4repair_space>types." ) ; <START_BUG> Class < ? > clazz = params . getClass ( ) ; <END_BUG> types [ i ] = JDBCTmpl . default_sql_type ( clazz ) ; } return oper . execute ( sql , params , types ) ; } catch ( SQLException e ) { throw new RuntimeException ( e ) ; } } static int default_sql_type ( Class < ? > cls ) { } public void drop ( String tbName ) { } public void truncate ( String tbName ) { } public ResultSet query ( String sql ) { } public ResultSet query ( String sql , String ... x ) { } private void cleanComma ( StringBuilder sb ) { } public boolean add ( Record record ) { } public boolean del ( Record record ) { } public boolean upd ( Record record ) { } @ Override public void close ( ) throws IOException { } public Set < String > tables ( ) { } @ Deprecated public JDBCOper oper ( ) { } }

Fix:
Class < ? > clazz = params [ i ] . getClass ( ) ;