Я пытаюсь использовать общий метод в первый раз и немного смущен. Я создал простой пример, чтобы продемонстрировать, что я, вероятно, ошибаюсь в этом и нуждаюсь в исправлении. Я использую Eclipse 3.6.1. У меня создалось впечатление, что компилятор определил типы аргументов с помощью вывода, но я не уверен, почему он заставляет меня использовать кастинг в универсальном методе. Это простой пример.Методы Java Generics - использование в первый раз
class Test1
{
Test1() {};
public String getX() {return "Test1"};
};
class Test2
{
Test2() {};
public String getX() {return "Test2"};
};
мой основной метод:
public static void main(String args[])
{
Test1 tst1 = new Test1();
Test2 tst2 = new Test2();
System.out.println("result: " + displayTest(tst1, tst2));
}
static <T,S> boolean displayTest(T x, S y)
{
System.out.println("X: " + ((Test1) x).getX());
System.out.println("Y: " + ((Test2) y).getX());
if (((Test1) x).getX().equals(((Test2) y).getX()))
return true;
else
return false;
}
Я думал, что компилятор будет знать, что T
в данном случае представляет собой пример Test1
и S
был Test2
, но в Eclipse, getX
не является правильным методом. Чтобы заставить это скомпилировать, это заставляет меня подвергать объекты правильному типу, который, как мне кажется, противоречит общим принципам общего метода.
Очевидно, что я не получаю это и делаю что-то неправильно. Как компилятор знает, какие типы в общем методе тогда? Как это должно быть сделано? В моей большой системе, где я пытаюсь реализовать это, у меня есть несколько методов, которые работают с различными типами объектов и пытаюсь сделать их обобщенными. то есть метод 1 вызывает метод 2 (который использует общий тип), который, в свою очередь, вызывает метод 3 (снова передавая общие типы). Я надеялся, что только начало вызовов функций (вызов метода 1 в этом случае) необходимо знать, какой тип объектов был, а все последующие методы - только общие методы.
Большое спасибо.
+1 Бей меня к нему. – Poindexter