я работаю на некотором множестве абстракций, представляющих результат SQL набора и написал эти методы:Java компилятор не согласован с безопасностью общего вызова метода
public interface Column<T>{
//some methods
}
public class SqlRowExtractor{
public void doExtraction(){
Collection<Column<?>> cols = getColumns(); //Returns the collection of Column<T>.
//A particular result set may contain,
//for instance 2 Column<Date>,
//1 Column<Integer> and so fotrh
for(Column<?> c : cols){
put(c, get(c)); //1 <-------------------- HERE
//Compile-error
}
//other staff
}
public <T> void put(Column<T> c, T o){
//put the extracted value in another place
}
public <T> T get(Column<T> c) throws SQLException{
//extract the value of the row for the Column<T> c
}
}
Я получил компиляцию ошибки в //1
, хотя совершенно ясно, подписи put
и get
методов, что нет возможности поставить inaprop соответствующее значение. Как я могу исправить ошибку безопасным способом? Сообщение об ошибке:
The method put(Column<T>, T) is not applicable for the arguments
(Column<capture#3-of ?>, capture#4-of ?)
Где появляется ваш цикл for? (то есть в каком классе и какой метод) – Eran
@Eran В методе класса. Класс содержит все перечисленные здесь методы. Но как это важно, когда на самом деле появляются петли? –
@Eran Исправлено, не могли бы вы рассмотреть вопрос об обновлении? –