Я знаю, что я не могу это сделать:метод перегрузки с тем же общим параметром?
public abstract class DTODomainTransformer<T, S> {
public abstract S transform(T);
public abstract T transform(S);
}
Потому что я получаю компилятор жалобу:
Method transform(T) has the same erasure transform(Object) as another method in type Transformer<T,S>
Я понимаю, что это потому, что как T
и S
может быть простирающийся же класса. Таким образом, делая это так, как я могу сказать ему: «Нет, они не то же самое, так что успокойтесь»
public interface Transformer<T extends AbstractDTO , S extends AbstractDomain> {
public abstract S transform(T object);
public abstract T transform(S object);
}
Тогда мой вопрос, есть ли способ, чтобы сообщить компилятору, что T
и S
расширения от различных классы, не сообщая, какие из них конкретны? Я имею в виду, что в этом последнем случае я указал, какие классы должны были быть T
и S
(соответственно). Но что, если я хочу, чтобы он был более общим и не указывал их? Я хотел бы сказать компилятору: «Эй, компилятор, T
и S
- это не одно и то же! Это разные классы. Я не знаю, какие именно классы они есть, но я уверен, что они разные».
Нет, нет никакого способа сделать это, не давая явных границ. –
Как вы можете - программист - обеспечить, чтобы пользователь вашего класса не нарушал это правило, если он использует исходный тип? – Mordechai
Если это помогает, вы можете связать только один из них. '' –
jas