Передача Экземпляров Объекта как обобщений методу - PullRequest
0 голосов
/ 09 мая 2019

У меня есть сценарий, похожий на приведенный ниже пример.

У меня есть два разных объекта, и я уже создал экземпляры из них.Мне нужно передать эти экземпляры как общие для параметров метода.

Я пытался передать параметры метода как класс obj, но он не работал

Class A
{

A()
{
List<String>collection = new ArrayList<>();
}

}

Class B
{

B()
{
List<String>collection = new ArrayList<>();
}

}

Class Main()
{

A a = new A(); 
B b = new B();

methodTest(a);
methodTest(b);

void methodTest(Class<T> genericObj)
{
 genericObj.collection.add("1");
 // I need to pass both the instance A and instance B to 
 genericObj


}


}

Нужны некоторые предложения.

Ответы [ 2 ]

0 голосов
/ 09 мая 2019

Самый простой способ - создать базовый класс и наследовать от него A и B. В методе вы используете базовый класс в качестве типа.
Это верно, так как A и B расширяют его.

Например:

class Base {
   List<String> collection;
   Base() {
    collection = new ArrayList<>();
   }
} 

class A extends Base{
    A(){
       super()
    }
}

class B extend Base{
    B(){
       super()
    }
}

void methodTest(Base genericObj)
{
   genericObj.collection.add("1");
}

Другая возможность - использовать интерфейс. Это было бы полезно, если коллекции не одного типа и, следовательно, не определены в базовом объекте.

Использование интерфейса:

interface MyInterface{
  public ArrayList<> getCollection();
}

class A implements MyInterface {

   List<String> collection;
    A(){
    collection = new ArrayList<>();
    }


    public ArrayList<> getCollection(){
        return collection;
    }
}

class B implements MyInterface{
   List<String> collection;
    B(){
       collection = new ArrayList<>();
    }

    public ArrayList<> getCollection(){
        return collection;
    }
}



void methodTest(MyInterface genericObj)
{
   genericObj.getCollection().add("1");
}
0 голосов
/ 09 мая 2019

Вы не передаете обобщенные значения методам, поскольку обобщенное значение является типом, а не объектом.

Что вы делаете, вы передаете объект; с общим объявлением в вашем классе.

например.

public class Test <T extends ClasThatHasCollection> {

    void methodTest(T genericObj) {
        genericObj.collection.add("1"); 
    }
}

Однако в вашем случае генерики кажутся излишними!

Просто у родительского класса P есть переменная экземпляра .collection; и оба класса A и B расширяют P; и передайте объект типа P в methodTest:

public class P {
    public Collection collection;
    // ....
}

public class A extends P {

}

void methodTest(P genericObj) {
     P.collection.add("1");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...