1. Общие классы
1.1 нормальные дженерики
Кода -копия выглядит следующим образом:
Пакет Test.lujianing;
/**
* Общий класс
* @param <t>
*/
Класс Тест <T> {
Частный T obj;
public void setValue (t obj) {
this.obj = obj;
}
public t getValue () {
System.out.println (obj.getClass (). GetName ());
вернуть OBJ;
}
}
/**
* Проверка общих классов
*/
публичный класс Testone {
public static void main (string [] args) {
// Проверка целочисленного общего
Тест <Integer> t1 = новый тест <Integer> ();
T1.SetValue (5);
Integer i = t1.getValue ();
System.out.println (i);
// Протестирование двойного общего
Тест <wound> t2 = новый тест <wood> ();
T2.SetValue (5,55d);
Double d = t2.getValue ();
System.out.println (d);
// тест строки Generic
Тест <string> t3 = новый тест <string> ();
T3.SetValue («Привет, мир»);
String str = t3.getValue ();
System.out.println (str);
}
}
Результат вывода:
Кода -копия выглядит следующим образом:
java.lang.integer
5
java.lang.double
5,55
java.lang.string
Привет, мир
1,2 К/В дженерики
Кода -копия выглядит следующим образом:
Пакет Test.lujianing;
импортировать java.util.hashmap;
импортировать java.util.map;
/**
* Создано администратором 14-3-30.
*/
класс testkv <k, v> {
Частная карта <K, V> map = new Hashmap <K, v> ();
public void put (k k, v v) {
map.put (k, v);
}
public v get (k k) {
return map.get (k);
}
}
открытый класс Testfour {
public static void main (string [] args) {
Testkv <string, string> t = new testkv <string, string> ();
t.put ("имя", "Цзянинг");
System.out.println (t.get ("name"));
Testkv <string, integer> t2 = new testkv <string, integer> ();
t2.put («Возраст», 24);
System.out.println (t2.get ("age"));
}
}
Результат вывода:
Кода -копия выглядит следующим образом:
Цзяньинг
двадцать четыре
2. Общий интерфейс
Кода -копия выглядит следующим образом:
Пакет Test.lujianing;
/**
* Общий интерфейс
* @param <t>
*/
публичный интерфейс testimpl <t> {
public void setValue (t t);
public t getValue ();
}
Результат вывода:
Кода -копия выглядит следующим образом:
1
Привет
3. Общие методы
Кода -копия выглядит следующим образом:
Пакет Test.lujianing;
/**
* Общий класс метода
*/
класс TestMethod {
/**
* Общие методы
*/
public <t> t getValue (Object S, Class <t> clazz) {
System.out.println (clazz.getName ());
T t = null;
if (clazz.getName (). equals ("java.lang.integer")) {
Double d = double.parsedouble (s.toString ());
int i = d.intvalue ();
t = (t) новое целое число (i);
}
if (clazz.getName (). equals ("java.lang.double")) {
t = (t) новый Double (s.toString ());
}
возврат t;
}
}
/**
* Общий тестовый класс метода
*/
открытый класс testthree {
public static void main (string [] args) {
Testmethod t = new testmethod ();
int i = t.getValue ("30.0011", integer.class);
System.out.println (i);
Double D = T.GetValue ("40.0022", Double.Class);
System.out.println (d);
}
}
Результат вывода:
Кода -копия выглядит следующим образом:
java.lang.integer
30
java.lang.double
40.0022
4. ограничить дженерики
В приведенном выше примере нет ограничения в диапазоне класса теста <t> держателя типа T, а тип ограничения по умолчанию эквивалентен объекту. Например, нам необходимо ограничить t типом цифрового интерфейса. Просто сделайте это: Class Test <T расширяет номер>.
5. Дикие дженерики
Кода -копия выглядит следующим образом:
Пакет Test.lujianing;
импортировать java.util.hashmap;
импортировать java.util.map;
/**
* Дикие дженерики
*/
открытый класс TestFive {
public static void main (string [] args) {
Карта <Строка, класс <?
map.put ("Integer", Integer.class);
map.put ("Double", Double.class);
for (map.Entry <string, class <? Extends number >> inpit: map.enterSet ()) {
System.out.println ("key:" + entry.getKey () + "Значение:" + entry.getValue ());
}
}
}
Результат вывода:
Кода -копия выглядит следующим образом:
Ключ: двойное значение: класс java.lang.double
Ключ: целочисленное значение: класс java.lang.integer
Простой пример: пример для 1.1
Кода -копия выглядит следующим образом:
public static void main (string [] args) {
// Проверка целочисленного общего
Тест <Integer> t1 = новый тест <Integer> ();
T1.SetValue (5);
веселье (T1);
// Протестирование двойного общего
Тест <wound> t2 = новый тест <wood> ();
T2.SetValue (5,55d);
Веселье (T2);
}
public static void Fun (тест <?> t) {
System.out.println ("Wild Generic" + t.getValue ());
}
Результат вывода:
Кода -копия выглядит следующим образом:
java.lang.integer
Дикие дженерики 5
java.lang.double
Дикие дженерики 5.55
6. Дополнение
В дженеках вы можете встретить <t> <e> и т. Д., T и E являются инициалами типа и элемента, соответственно. E обычно используется для представления типа элементов в типе сбора, таких как определение интерфейса списка, список публичных интерфейсов <e> Extends Collection <e>. Это всего лишь привычка именования, и между ними нет существенной разницы.