<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://www.jexp.ru/index.php?action=history&amp;feed=atom&amp;title=Java_Tutorial%2FGenerics%2FGenerics_Basics</id>
		<title>Java Tutorial/Generics/Generics Basics - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://www.jexp.ru/index.php?action=history&amp;feed=atom&amp;title=Java_Tutorial%2FGenerics%2FGenerics_Basics"/>
		<link rel="alternate" type="text/html" href="http://www.jexp.ru/index.php?title=Java_Tutorial/Generics/Generics_Basics&amp;action=history"/>
		<updated>2026-04-23T08:44:27Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://www.jexp.ru/index.php?title=Java_Tutorial/Generics/Generics_Basics&amp;diff=5450&amp;oldid=prev</id>
		<title>Admin: 1 версия</title>
		<link rel="alternate" type="text/html" href="http://www.jexp.ru/index.php?title=Java_Tutorial/Generics/Generics_Basics&amp;diff=5450&amp;oldid=prev"/>
				<updated>2010-06-01T05:20:56Z</updated>
		
		<summary type="html">&lt;p&gt;1 версия&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr style=&quot;vertical-align: top;&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Версия 05:20, 1 июня 2010&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;text-align: center;&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	<entry>
		<id>http://www.jexp.ru/index.php?title=Java_Tutorial/Generics/Generics_Basics&amp;diff=5449&amp;oldid=prev</id>
		<title> в 17:44, 31 мая 2010</title>
		<link rel="alternate" type="text/html" href="http://www.jexp.ru/index.php?title=Java_Tutorial/Generics/Generics_Basics&amp;diff=5449&amp;oldid=prev"/>
				<updated>2010-05-31T17:44:27Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==  A Generic Class with Two Type Parameters ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
class TwoGen&amp;lt;T, V&amp;gt; {&lt;br /&gt;
  T ob1;&lt;br /&gt;
  V ob2;&lt;br /&gt;
  TwoGen(T o1, V o2) {&lt;br /&gt;
    ob1 = o1;&lt;br /&gt;
    ob2 = o2;&lt;br /&gt;
  }&lt;br /&gt;
  void showTypes() {&lt;br /&gt;
    System.out.println(&amp;quot;Type of T is &amp;quot; + ob1.getClass().getName());&lt;br /&gt;
    System.out.println(&amp;quot;Type of V is &amp;quot; + ob2.getClass().getName());&lt;br /&gt;
  }&lt;br /&gt;
  T getob1() {&lt;br /&gt;
    return ob1;&lt;br /&gt;
  }&lt;br /&gt;
  V getob2() {&lt;br /&gt;
    return ob2;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
public class MainClass {&lt;br /&gt;
  public static void main(String args[]) {&lt;br /&gt;
    TwoGen&amp;lt;Integer, String&amp;gt; tgObj = new TwoGen&amp;lt;Integer, String&amp;gt;(88, &amp;quot;Generics&amp;quot;);&lt;br /&gt;
    tgObj.showTypes();&lt;br /&gt;
    int v = tgObj.getob1();&lt;br /&gt;
    System.out.println(&amp;quot;value: &amp;quot; + v);&lt;br /&gt;
    String str = tgObj.getob2();&lt;br /&gt;
    System.out.println(&amp;quot;value: &amp;quot; + str);&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=codeResult&amp;gt;Type of T is java.lang.Integer&lt;br /&gt;
Type of V is java.lang.String&lt;br /&gt;
value: 88&lt;br /&gt;
value: Generics&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  A generic type can accept more than one type variables. ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.util.HashMap;&lt;br /&gt;
import java.util.Map;&lt;br /&gt;
public class MainClass {&lt;br /&gt;
    public static void main (String[] args) {&lt;br /&gt;
        Map&amp;lt;String, String&amp;gt; map = new HashMap&amp;lt;String, String&amp;gt;();&lt;br /&gt;
        map.put (&amp;quot;key1&amp;quot;, &amp;quot;value1&amp;quot;);&lt;br /&gt;
        map.put (&amp;quot;key2&amp;quot;, &amp;quot;value2&amp;quot;);&lt;br /&gt;
        String value1 = map.get(&amp;quot;key1&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Generics Work Only with Objects ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
Gen&amp;lt;int&amp;gt; strOb = new Gen&amp;lt;int&amp;gt;(53); // Error, can&amp;quot;t use primitive type&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Introducing Generic Types ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;OL&amp;gt;&amp;lt;LI&amp;gt;A generic type can accept parameters.&amp;lt;/LI&amp;gt;&amp;lt;LI&amp;gt;A generic type is often called a parameterized type.&amp;lt;/LI&amp;gt;&amp;lt;LI&amp;gt;You pass reference types in angle brackets to generic types.&amp;lt;/LI&amp;gt;&amp;lt;/OL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
List&amp;lt;E&amp;gt; myList;&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;E is called a type variable, namely a variable that will be replaced by a type.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;OL&amp;gt;&amp;lt;LI&amp;gt;A generic type that uses a type variable E allows you to pass E when declaring or instantiating the generic type.&amp;lt;/LI&amp;gt;&amp;lt;LI&amp;gt;If E is a class, you may also pass a subclass of E&amp;lt;/LI&amp;gt;&amp;lt;LI&amp;gt;If E is an interface, you may also pass a class that implements E.&amp;lt;/LI&amp;gt;&amp;lt;LI&amp;gt;By convention, you use a single uppercase letter for type variable names.&amp;lt;/LI&amp;gt;&amp;lt;/OL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Life without Generics ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;When retrieving a member from stringList1, you get an instance of java.lang.Object. &lt;br /&gt;
In order to work with the original type of the member element, you must first downcast it to String.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.util.ArrayList;&lt;br /&gt;
import java.util.List;&lt;br /&gt;
public class MainClass {&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    List stringList1 = new ArrayList ();&lt;br /&gt;
    stringList1.add (&amp;quot;Java 5&amp;quot;);&lt;br /&gt;
    stringList1.add (&amp;quot;with generics&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    String s1 = (String) stringList1.get (0);&lt;br /&gt;
    &lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Nested generic type ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;A generic type is itself a type and can be used as a type variable. &lt;br /&gt;
For example, if you want your List to store lists of strings:&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
List&amp;lt;List&amp;lt;String&amp;gt;&amp;gt; myListOfListsOfStrings;&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Raw Types and Legacy Code ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;To handle the transition to generics, Java allows a generic class to be used without any &lt;br /&gt;
type arguments. This creates a raw type for the class.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
// Demonstrate a raw type.&lt;br /&gt;
class Gen&amp;lt;T&amp;gt; { &lt;br /&gt;
  T ob;&lt;br /&gt;
   &lt;br /&gt;
  Gen(T o) { &lt;br /&gt;
    ob = o; &lt;br /&gt;
  } &lt;br /&gt;
 &lt;br /&gt;
  T getob() { &lt;br /&gt;
    return ob; &lt;br /&gt;
  } &lt;br /&gt;
} &lt;br /&gt;
 &lt;br /&gt;
public class MainClass { &lt;br /&gt;
  public static void main(String args[]) { &lt;br /&gt;
    Gen&amp;lt;Integer&amp;gt; iOb = new Gen&amp;lt;Integer&amp;gt;(88); &lt;br /&gt;
    Gen&amp;lt;String&amp;gt; strOb = new Gen&amp;lt;String&amp;gt;(&amp;quot;Generics Test&amp;quot;); &lt;br /&gt;
 &lt;br /&gt;
    Gen raw = new Gen(new Double(98.6));&lt;br /&gt;
    // Cast here is necessary because type is unknown.&lt;br /&gt;
    double d = (Double) raw.getob();&lt;br /&gt;
    System.out.println(&amp;quot;value: &amp;quot; + d);&lt;br /&gt;
    strOb = raw; // OK, but potentially wrong&lt;br /&gt;
    String str = strOb.getob();  &lt;br /&gt;
  &lt;br /&gt;
  // This assignment also overrides type safety.&lt;br /&gt;
  raw = iOb; // OK, but potentially wrong&lt;br /&gt;
  d = (Double) raw.getob(); &lt;br /&gt;
    &lt;br /&gt;
  } &lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=codeResult&amp;gt;Exception in thread &amp;quot;main&amp;quot; value: 98.6&lt;br /&gt;
java.lang.ClassCastException: java.lang.Double&lt;br /&gt;
  at MainClass.main(MainClass.java:26)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  What Are Generics? A Simple Generics Example ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;The term generics means parameterized types. &lt;br /&gt;
(Java 2 V5.0 (Tiger) New Features by Herbert Schildt )&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;OL&amp;gt;&amp;lt;LI&amp;gt;T is a type parameter that will be replaced by a real type.&amp;lt;/LI&amp;gt;&amp;lt;LI&amp;gt;T is the name of a type parameter.&amp;lt;/LI&amp;gt;&amp;lt;LI&amp;gt;This name is used as a placeholder for the actual type &lt;br /&gt;
that will be passed to Gen when an object is created.&amp;lt;/LI&amp;gt;&amp;lt;/OL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
class GenericClass&amp;lt;T&amp;gt; {&lt;br /&gt;
  T ob;&lt;br /&gt;
  GenericClass(T o) {&lt;br /&gt;
    ob = o;&lt;br /&gt;
  }&lt;br /&gt;
  T getob() {&lt;br /&gt;
    return ob;&lt;br /&gt;
  }&lt;br /&gt;
  void showType() {&lt;br /&gt;
    System.out.println(&amp;quot;Type of T is &amp;quot; + ob.getClass().getName());&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
public class MainClass {&lt;br /&gt;
  public static void main(String args[]) {&lt;br /&gt;
    // Create a Gen reference for Integers.&lt;br /&gt;
    GenericClass&amp;lt;Integer&amp;gt; iOb = new GenericClass&amp;lt;Integer&amp;gt;(88);&lt;br /&gt;
    iOb.showType();&lt;br /&gt;
    // no cast is needed.&lt;br /&gt;
    int v = iOb.getob();&lt;br /&gt;
    System.out.println(&amp;quot;value: &amp;quot; + v);&lt;br /&gt;
    // Create a Gen object for Strings.&lt;br /&gt;
    GenericClass&amp;lt;String&amp;gt; strOb = new GenericClass&amp;lt;String&amp;gt;(&amp;quot;Generics Test&amp;quot;);&lt;br /&gt;
    strOb.showType();&lt;br /&gt;
    String str = strOb.getob();&lt;br /&gt;
    System.out.println(&amp;quot;value: &amp;quot; + str);&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=codeResult&amp;gt;Type of T is java.lang.Integer&lt;br /&gt;
value: 88&lt;br /&gt;
Type of T is java.lang.String&lt;br /&gt;
value: Generics Test&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Working with generic List ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.util.ArrayList;&lt;br /&gt;
import java.util.List;&lt;br /&gt;
public class MainClass {&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    List stringList1 = new ArrayList();&lt;br /&gt;
    stringList1.add(&amp;quot;Java 5&amp;quot;);&lt;br /&gt;
    stringList1.add(&amp;quot;with generics&amp;quot;);&lt;br /&gt;
    String s1 = (String) stringList1.get(0);&lt;br /&gt;
    System.out.println(s1.toUpperCase());&lt;br /&gt;
&lt;br /&gt;
    List&amp;lt;String&amp;gt; stringList2 = new ArrayList&amp;lt;String&amp;gt;();&lt;br /&gt;
    stringList2.add(&amp;quot;Java 5&amp;quot;);&lt;br /&gt;
    stringList2.add(&amp;quot;with generics&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    String s2 = stringList2.get(0);&lt;br /&gt;
    System.out.println(s2.toUpperCase());&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;/div&gt;</summary>
			</entry>

	</feed>