Реализация метода generi c в java - PullRequest
0 голосов
/ 16 июня 2020

У меня есть код ниже, который выдает ошибку, когда я пытаюсь получить доступ к методу объекта. Что я делаю здесь не так.

public class Main{
public static void main(String[] args) {
    MyFirstObject myObj1 = new MyFirstObject();
    MySecondObject myObj2 = new MySecondObject();

MyGenerics mg = new MyGenerics();
System.out.println( mg.partTwo(myObj1, myObj2) );

}
}

class MyFirstObject{
    int value(){
        return 1;
    }
}
class MySecondObject{
    int value(){
        return 2;
    }
}

class MyGenerics {


   static <T,U> int partTwo (T o1, U o2) 
    { 
        System.out.println(o1.value()); 
                           return 1;
    } 
}

Ошибка: Основная. java: 31: ошибка: не удается найти символ System.out.println (o1.value ()); ^ символ: значение метода () расположение: переменная o1 типа T, где T, U - переменные типа: T extends Object, объявленный в методе partTwo (T, U) U extends Object, объявленный в методе partTwo (T, U) 1 ошибка

1 Ответ

2 голосов
/ 16 июня 2020

Когда вы передаете T или U, java не знает, что это за объект и какие методы он содержит, поэтому вам нужна некоторая спецификация. Например, вы можете создать интерфейс и реализовать его в классах.

Пример:

public class Main {
    public static void main(String[] args) {
        MyFirstObject myObj1 = new MyFirstObject();
        MySecondObject myObj2 = new MySecondObject();

        MyGenerics mg = new MyGenerics();
        System.out.println(mg.partTwo(myObj1, myObj2));

    }
}

interface Action {
    int value();
}

class MyFirstObject implements Action {
    public int value() {
        return 1;
    }
}

class MySecondObject implements Action {
    public int value() {
        return 2;
    }
}

class MyGenerics {

    static <T extends Action, U extends Action> int partTwo(T o1, U o2) {
        System.out.println(o1.value());
        return 1;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...