Mam interfejs, który będzie implementowany przez kilka różnych klas, z których każda używa różnych typów i typów zwracanych. Typ zwracany można wywnioskować z metody rodzaj ogólny, ale mam problem z realizacją tego.Jak zwrócić konkretny typ podczas implementowania interfejsu ogólnego?
Interfejs wygląda obecnie:
public interface TransformUtilsBase<T> {
Class<?> transformToNhin(T request, BrokerContext brokerContext);
}
Chcę klasa IMPL wyglądać:
public class TransformUtilsXCPD implements TransformUtilsBase<foo> {
bar transformToNhin(foo request, BrokerContext brokerContext) {
code here
}
W IMPL wiem co typ zwracany powinien być. Na poziomie interfejsu nie ma sposobu, aby powiedzieć.
Mogę po prostu zrezygnować z interfejsu razem i po prostu utworzyć kilka klas z tymi samymi nazwami metod, ale chciałem sformalizować je, ponieważ wszystkie są używane w tym samym celu. Tylko typy są różne.
Albo mógłbym mieć jedną dużą klasę metod statycznych, ponieważ są to operacje typu util, ale stawało się nieporęczne w zarządzaniu klasą z tak wieloma metodami o tej samej nazwie i wszystkimi niezbędnymi metodami pomocniczymi (znowu wszystko z Takie samo imię).
Implementacja interfejsu wydaje się najlepszą opcją sformalizowania funkcjonalności, mimo że nie jestem w stanie wykonywać metod statycznych. Po prostu nie mogę wymyślić, jak radzić sobie z typami zwrotu.
edycja: rozszerzenie interfejsu, aby pokazać pełny przykład, aby zapobiec dalszemu pomyłkom. Interfejs
public interface TransformUtilsBase<T, U> {
Class<?> transformToNhin(T request, BrokerContext brokerContext);
Class<?> transformToXca(U request, BrokerContext brokerContext);
}
IMPL
public class TransformUtilsXCPD implements TransformUtilsBase<Foo, Bar> {
Baz transformToNhin(Foo request, BrokerContext brokerContext) { code here }
Biz transformToXca(Bar request, BrokerContext brokerContext) { code here }
}
Czy próbujesz wrócić aktualną klasę Baz lub wystąpienie Baz? Twoja edycja implikuje, że może to być druga. – Alex
Dobra uwaga. Próbuję zwrócić konkretną instancję klasy Baz, utworzoną podczas procesu przekształcania. Zapis wieloznaczny jest najlepszym sposobem, jaki wiedziałem, aby przekazać moją pożądaną intencję, aby zapewnić generyczne tylko dla zmiennych metody, które można określić za pomocą typu zwrotu. –