Использует дженерики в Java кроме создания безопасных коллекций типов - PullRequest
4 голосов
/ 03 августа 2011

Я в основном использовал дженерики для создания безопасных коллекций типов. Каковы другие варианты использования дженериков?

Ответы [ 8 ]

5 голосов
/ 03 августа 2011

Я использовал его, чтобы написать очень тонкий слой DAO:

/*
  superclass for all entites, a requirement is that they have the 
  same kind of primary key
*/
public abstract class Entity {
}

/*
  superclass for all DAOs. contains all CRUD operations and anything else
  can be generalized
*/
public abstract class DAO<T extends Entity> {

  //assuming full control over the database, all entities have Integer pks.
  public T find(Integer pk) {...}
  public void save(T entity) {...}
  public void remove(T entity) {...}
  etc...

}

/*
  Complete example of an ideal DAO, assuming that there are no special
  operations specific for the Entity.
  Note the absence of any implementation at all.
*/
public class SpecificDAO extends DAO<SpecificEntity> {}
2 голосов
/ 03 августа 2011

Другое интересное использование - представление типов в качестве переменных в каркасе отражения Java .

В частности, обратите внимание, что java.lang.Class имеет параметр типа, определяющий, какойКласс Class объект представляет.

См. Википедия для общей информации.

2 голосов
/ 03 августа 2011

Чтобы разрешить использование пользовательских, пользовательских классов с вашим кодом.

Допустим, вы выпустили SDK, который обеспечивает некоторые специальные функции.Обобщения позволят разработчикам использовать вашу функциональность во многих местах, практически с любым классом.

Цель обобщения заключается в сокращении повторения кода.

1 голос
/ 03 августа 2011

Есть и другие применения, такие как универсальные классы и универсальные методы.

0 голосов
/ 20 марта 2016

Обобщения позволяют типам быть параметрами Обобщения позволяют типам (классам и интерфейсам) быть параметрами при определении классов, интерфейсов и методов. Это похоже на знакомые формальные параметры, используемые в объявлениях методов. Разница заключается в том, что входные данные для формальных параметров являются значениями, в то время как входные данные для типов параметров являются типами. Пример ниже: - Использование формального параметризованного метода и обобщений: -

class Room {

    private Object object;

    public void add(Object object) {
        this.object = object;
    }

    public Object get() {
        return object;
    }
}

public class Main {
    public static void main(String[] args) {
        Room room = new Room();
        room.add(60);
        //room.add("60"); //this will cause a run-time error
        Integer i = (Integer)room.get();
        System.out.println(i);
    }
}

Родовая версия выше: -

class Room<T> {

    private T t;

    public void add(T t) {
        this.t = t;
    }

    public T get() {
        return t;
    }
}

public class Main {
    public static void main(String[] args) {
        Room<Integer> room = new Room<Integer>();
        room.add(60);

        Integer i = room.get();
        System.out.println(i);
    }
}

В генетической версии класса, если кто-то добавит room.add("60"), будет показана ошибка времени компиляции.

1.Инфо источника 2. Пример взят из

0 голосов
/ 12 апреля 2012

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

0 голосов
/ 03 августа 2011

Перечисления являются еще одним примером из JDK.В основном, когда у вас есть два класса, работающих вместе, но вы не знаете точно, какие классы, дженерики становятся интересными.

0 голосов
/ 03 августа 2011

Обобщения используются:

  • Безопасность типа времени компиляции.
  • Избегайте приведения (следовательно, избегайте ClassCastException ).
  • Читаемый код.

См. Учебник Java Generics для подробного объяснения.

...