У меня есть класс с конструктором подписью следующим образом:Java Общих типов ошибок несовпадения
public class MyClass <U>{
public <T> MyClass(Set<T> data, Function<T,U> func)...
}
Это нормально. Но я хочу перегрузить конструктор, в случае, если вы не предоставляете функцию func
, она просто будет использовать (item)->{return item;}
. Я написал еще один конструктор, который выглядит следующим образом:
public <T> MyClass(Set<T> data){
this(
data,
(item)->{return item;}
);
}
Это вызывает ошибку несоответствия типов, так как функцию я обеспечиваю в качестве аргумента моего конструктора принимает значение типа T
, и возвращает то же значение, которое должно быть U
. Я не понимаю, почему система алгебраического типа не видит, что в этом случае U и T являются одинаковыми, и это нормально?
Вам не нужно неуклюжий синтаксис, как '(п) -> {возвращение пункта;}', 'просто написать пункт -> пункт '. Или, ну, 'Function.identity()' ... – Holger
Спасибо @Holger, я переключился на использование 'Function.identity()' –