当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Java Generic用法及代码示例


Java 泛型的引入是为了处理类型安全对象。它使代码稳定。Java泛型方法和类,使程序员能够使用单个方法声明、一组相关方法、一组相关类型。泛型还提供编译时类型安全它允许程序员在编译时捕获无效类型。通用的方法参数化的类型。使用泛型,其想法是允许任何数据类型成为它整数、字符串,或任何用户自定义数据类型并且可以创建使用不同数据类型的类。

泛型类仅仅意味着项目或函数在该类中可以使用参数进行概括(例如T) 指定我们可以添加任何类型作为参数来代替 T 例如整数、字符、字符串、双精度或任何其他用户定义的类型。

例子:单一类型参数

class Solution<T>
{
   T data;
   public static T getData(){
       return data;
   }
}

例子:多种类型参数

public class Pair<K, V> {

    private K key;
    private V value;

    public Pair(K key, V value) {
    this.key = key;
    this.value = value;
    }

    public K getKey()    { return key; }
    public V getValue() { return value; }
}

在此示例中,我们可以使用此类的对象或实例多次使用不同的参数,如下所示T类型。如果我们希望数据是int类型,即T可以替换为 Integer,类似地也可以替换为 String、Character、Float 或任何用户定义的类型。泛型类的声明与非泛型类几乎相同,只是类名后面跟着类型参数部分。泛型类的类型参数部分可以有一个或多个用逗号分隔的类型参数。

我们可以编写一个通用方法声明,可以使用不同类型的参数进行调用。根据传递给泛型方法的参数类型,编译器适当地处理每个方法调用。以下是定义通用方法的规则

  • 所有泛型方法声明都有一个由尖括号指示的类型参数部分<>位于方法的返回类型之前。
  • 每个类型参数部分可以包含一个或多个以逗号分隔的类型参数。类型参数或类型变量是指定泛型类型名称的标识符。
  • 类型参数可用于声明返回类型,称为实际类型参数.
  • 泛型方法的主体的声明方式与任何非泛型方法的主体相同。需要注意的是,类型参数只能代表引用类型,而不是原始类型(如 int、double 和 char)。

Java 泛型的优点

1.Type-Safety:泛型中只能保存一种类型的对象。

2. 不需要类型转换: 不需要打字。

例子:

Before Generics 
     List l= new ArrayList();
     l.add("India");
     String s = (String) l.get(0);     // typecasting  
                                         
After Generics, typecasting of the object is not required 
      List<String> l = new ArrayList<String>();    
     l.add("hello");   
      String s = l.get(0);   

3. 编译时检查:它会在编译时检查所有与泛型相关的数据类型的错误,因此在运行时不会出现该问题。

List<String> list = new ArrayList<String>();    
list.add("hello");   
list.add(32);   //Compile Time Error  

对于泛型类的实例

BaseType <Type> object = new BaseType <Type>();

注意:在参数 Type 中,我们不能使用 int、char、float 等原语。

例子:

Java


// Java program to show the
// instance of a generic class
// Generic Classes
// we use <> to specify parameter
// type and we can add any datatype
// like Integer, Double, String,
// Character or any user defined
// Datatype
// Every time when we need to make an
// object of another datatype of this
// generic class , we need not to make
// the whole class of that datatype again
// instead we can simply change the
// parameter/Datatype in braces <>
public class Area<T> {
    // T is the Datatype like String,
    // Integer of which Parameter type,
    // the class Area is of
    private T t;
    public void add(T t)
    {
        // this.t specify the t variable inside
        // the Area Class whereas the right hand
        // side t simply specify the value as the
        // parameter of the function add()
        this.t = t;
    }
    public T get() { return t; }
    public void getArea() {}
    public static void main(String[] args)
    {
        // Object of generic class Area with parameter Type
        // as Integer
        Area<Integer> rectangle = new Area<Integer>();
        // Object of generic class Area with parameter Type
        // as Double
        Area<Double> circle = new Area<Double>();
        rectangle.add(10);
        circle.add(2.5);
        System.out.println(rectangle.get());
        System.out.println(circle.get());
    }
}
输出
10
2.5




相关用法


注:本文由纯净天空筛选整理自goelshubhangi3118大神的英文原创作品 Generic Class in Java。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。