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
相关用法
- Java GregorianCalendar computeFields()用法及代码示例
- Java GregorianCalendar computeTime()用法及代码示例
- Java GregorianCalendar getActualMaximum()用法及代码示例
- Java GregorianCalendar getActualMinimum()用法及代码示例
- Java GregorianCalendar getGregorianChange()用法及代码示例
- Java GregorianCalendar roll()用法及代码示例
- Java GregorianCalendar setGregorianChange()用法及代码示例
- Java GregorianCalendar add()用法及代码示例
- Java GregorianCalendar clone()用法及代码示例
- Java GregorianCalendar equals()用法及代码示例
- Java GregorianCalendar getGreatestMinimum()用法及代码示例
- Java GregorianCalendar getLeastMaximum()用法及代码示例
- Java GregorianCalendar getMaximum()用法及代码示例
- Java GregorianCalendar getMinimum()用法及代码示例
- Java GregorianCalendar getTimeZone()用法及代码示例
- Java GregorianCalendar hashCode()用法及代码示例
- Java GregorianCalendar isLeapYear()用法及代码示例
- Java GregorianCalendar setTimeZone()用法及代码示例
- Java Guava Booleans.asList()用法及代码示例
- Java Guava Floats.asList()用法及代码示例
- Java Guava Lists.partition()用法及代码示例
- Java Guava Bytes.asList()用法及代码示例
- Java Guava Lists.reverse()用法及代码示例
- Java Guava Doubles.asList()用法及代码示例
- Java Guava Shorts.asList()用法及代码示例
注:本文由纯净天空筛选整理自goelshubhangi3118大神的英文原创作品 Generic Class in Java。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。