я наткнулся на Java код, подобный следующему:Java общий интерфейс с ограничением по типу против C# дженериков
public interface ITest<T1 extends IOne,T2 extends ITwo> {
boolean handle(T1 value1);
boolean handle(T2 value2);
}
public interface IOne {}
public interface ITwo {}
а затем реализация ITEST:
public class Test implements ITest {
@Override
public boolean handle(IOne value1) {
return false;
}
@Override
public boolean handle(ITwo value2) {
return false;
}
}
Обратите внимание на отсутствие декларации типа в «Тест реализует ITest». Исходя из мира C#, это удивило меня, поскольку вы не можете сделать это в C#. Вы должны написать что-то вроде:
public class Test : ITest<IOne, ITwo>
Я понимаю, что Java дженериков очень отличается от C# дженериков, но я хотел бы, чтобы лучше понять, что происходит в коде Java, что позволяет выше код для компиляции? Является ли это вывод типа компилятором? Является ли исходный тип IOne и ITwo для класса Test? http://docs.oracle.com/javase/tutorial/java/generics/rawTypes.html
Спасибо.
Это должно дать вам предупреждение о компиляторе на Java. – SLaks
@Servy: Это незаконно на Java. (из-за стирания типа) – SLaks
'Я понимаю, что генерические приемы Java сильно отличаются от C# generics' - Правильно. java - смешная шутка, а C# - серьезный язык программирования. java generics являются уродливыми, смешными и бесполезными, потому что фактическая информация о типе «стирается» во время компиляции, что просто странно. В то время как C# имеет истинную поддержку дженериков, а дженерики скомпилированы в информацию о типах данных, хранящихся в двоичных файлах, на всех этапах. –