хотите использовать дженерики типа <T> - PullRequest
0 голосов
/ 06 июня 2019

Я хочу использовать универсальный тип <T>, чтобы он принимал любые типы объектов. Ниже приведен пример исходного кода моего кода.

class Address{
///
}

class Person{

///

}

class Details
{
Map<String,String> addressMap;
Map<String,String> personMap;
...

//getters

//setters

public void updateAddress(String id, String case) {
        this.addressMap.put(id, case);
    }

public void updatePerson(String id, String case) {
        this.personMap.put(id, case);
    }
}

Я хочу изменить класс Details, используя <T>, чтобы он принимал любые типы объектов. Пожалуйста, дайте мне знать лучший подход.

Могу ли я ввести новую переменную (allObjectMap), как показано ниже, вместо использования отдельных переменных для разных объектов (addressMap, personMap). Пример кода ниже.

class Details<T>
{
Map<T,String> allObjectMap;

//getter & setter
    public Map<T, String> getAllObjectMap() {
    return allObjectMap;
}

public void setAllObjectMap(Map<T, String> allObjectMap) {
    this.allObjectMap = allObjectMap;
}
public void updateAddress(String id, String case) {
       // this.addressMap.put(id, case);
     this.allObjectMap.put((T)id, case);
    }

public void updatePerson(String id, String case) {
        this.personMap.put(id, case);
  this.allObjectMap.put((T)id, case);
    }
}

Пожалуйста, дайте мне знать лучший подход.

1 Ответ

0 голосов
/ 06 июня 2019

Пример, который вы показали, неверен как по логике, так и по семантике, и по замыслу.

Классы, которые вы показали, даже не связаны и не встречаются в "общем" случае обработки.

Я использовал 2 разных класса.

class Junior {

}
class Senior {

}
class Details<T> {
    Map<T, String> allObjectMap;

    public Map<T, String> getAllObjectMap() {
        return allObjectMap;
    }
    public void setAllObjectMap(Map<T, String> allObjectMap) {
        this.allObjectMap = allObjectMap;
    }
}

В вашем основном методе

HashMap<Junior, String> map1 = new HashMap<>();
HashMap<Senior, String> map2 = new HashMap<>();
Details<Junior> juniors = new Details<Junior>();
juniors.setAllObjectMap(map1);
Details<Senior> seniors = new Details<Senior>();
seniors.setAllObjectMap(map2);

Как видите, это вполне возможно сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...