2017-01-13 3 views
2

У меня есть универсальный метод:Почему Java Generic аргумент метод Классы нужно быть Cast

public <T> boolean saveRow(T row, Class<T> rowClass) { 
    Mapper<T> rowMapper = mappingManager.mapper(rowClass); 
    rowMapper.save(row); 

    return true; 
} 

И я хотел бы канаву второго параметра, так как я могу вывести rowClass из row.getClass().

Я заметил, что единственный способ сделать эту работу литья row.getClass() к (Class<T>) row.getClass():

public <T> boolean saveRow(T row) { 
    Mapper<T> rowMapper = mappingManager.mapper((Class<T>) row.getClass()); 
    rowMapper.save(row); 

    return true; 
} 

Почему литое необходимы?

Спасибо!

+1

(ответ BalusC в) https://stackoverflow.com/questions/7276096/getclass-of-a-generic-method-parameter-in-a-java –

ответ

1

Потому что Class.getClass() не знает об общем.
Class<?> не может заменить на Class<T>.

Посмотрите на подпись:

public final native Class<?> getClass(); 
+0

Спасибо много! N00b меня за то, что я не проверяю подпись :) – Cristi

+0

Добро пожаловать :) Иногда ответ не очень далек :) – davidxxx