package com.study.generics;
class GenericsControlClass<T> { //T 泛型参数类型由外部指定
private T variable;
public T getVariable() {
return variable;
}
public void setVariable(T e) {
this.variable = e;
}
public String toString() { //重写泛型类中的toString方法,
return "泛型类的变量值为:"+this.variable;
}
}
public class GenericsDemo05 {
public static void main(String []args) {
GenericsControlClass<String> controlClass = new GenericsControlClass<String>();
controlClass.setVariable("泛型受限制");
GenericsDemo05 demo05 = new GenericsDemo05();
demo05.controlDisplay(controlClass);
controlClass.setVariable("泛型受限制1");
demo05.controlDisplay(controlClass);
GenericsControlClass<Float> controlClass1 = new GenericsControlClass<Float>();
controlClass1.setVariable(100.00f);
//demo05.controlDisplay(controlClass1);//此处泛型受限制,抛出The method controlDisplay(GenericsControlClass<? extends String>)
//in the type GenericsDemo05 is not applicable for the arguments (GenericsControlClass<Float>)
//此泛型受限制,且不可以传递Object对象
//GenericsControlClass<Object> obj = new GenericsControlClass<Object>();
//controlClass.setVariable(new Object("e2"));
//demo05.controlDisplay(controlClass);
//demo05.controlDisp(controlClass);
//泛型不能向上转型
//GenericsControlClass<Object> obj1 = new GenericsControlClass<Object>();
//obj1=controlClass;
}
public void controlDisplay(GenericsControlClass<? extends String> control) { //泛型受限制,则使用extends 如:泛型类<? extends Object> 实例对象 泛型值可以使用String 和Object对象
System.out.println(control); //泛型类中不重写toString() 方法,则打印出来的是泛型类的对象。
}
public void controlDisp(GenericsControlClass<? extends Number> control) { //泛型受限制,Number是所有数值型的基类,泛型参数类型可以为,Long ,Double,Float,等不可以为String等
System.out.println(control);
}
}
分享到:
相关推荐
Java泛型深入的内容涵盖泛型的基本概念、泛型类、接口、方法以及泛型的使用限制和高级特性。 首先,Java中的泛型允许定义方法、接口、类和变量时不指定具体的数据类型,而是在使用的时候再通过泛型类型参数来指定...
总之,Java泛型通过类型检查和类型安全提供了更强大、更安全的代码。类型擦除确保了运行时性能不会因泛型而受到影响,而通配符则提供了处理不确定类型的能力。理解并有效利用这些概念对于编写高效、健壮的Java代码至...
Java 泛型是Java 5引入的一个重要特性,它允许在...总之,Java泛型是一种强大的工具,它提高了代码的类型安全性和可读性,同时减少了类型转换的需要。通过理解和熟练运用泛型,可以编写出更加健壮、可维护的Java程序。
`)则是在变量或方法调用中使用,表示未知但受限制的具体类型。两者在使用场景和作用上有显著区别。 #### 2.7 通配符捕获 通配符捕获是指在编译器遇到未知类型参数时,会自动将其转换为具体类型的过程。这一过程...
使用泛型方法时,至少返回值或参数有一个是泛型定义的,而且应该保持一致,否则可能会受到各种限制。 Java泛型类和泛型方法是Java编程语言中的一种重要概念,它们提高了代码的灵活性和可读性,使得开发者可以编写...
而泛型构造函数是一个泛型构造函数,它带有一个泛型类型参数`E`,该参数是受限制的,需要实现`Rankable`和`Serializable`接口。 ```java public <E extends Rankable & Serializable> Entry(E element) { this....
《Thinking in Java》的作者 Bruce Eckel 曾经对 Java 的泛型表示怀疑,而 C# 的泛型因其简洁性和实用性受到很多开发者的青睐。 - **C# 泛型的特点**: - **虚拟机级别的支持**:C# 的泛型是在 CLR (Common ...
Java泛型是自JDK 1.5版本引入的一个重要特性,目的是为了提高代码的类型安全性和重用性。在Java中,泛型允许开发者在类、接口和方法中使用类型参数,使得代码能处理多种数据类型而无需重复编写相似的代码。然而,...
泛型的发展受到了C++模板的启发,但与C++模板不同的是,Java中的泛型在运行时是被擦除的。这意味着在编译后的字节码中,泛型信息不会保留,因此泛型主要是为了提供编译时的类型检查和优化。在运行时,`List<E>`和`...
1. **数组**支持多态引用,但添加或修改元素时受到限制。 2. **泛型**通过类型参数提供静态类型检查,但在多态引用上存在限制,但可以通过使用通配符进行部分解耦。 3. **集合**(如`List<Object>`)提供了最大的...
”表示一个受限制的通配符,此处的“?”意为:通配符“?”只能是 A类及其子类作为泛型参数的泛型的父类,而不再是任意类型参数泛型的父类。 ### 2. 设置Java泛型通配符的下限 设置Java泛型通配符下限的关键字是...
即便你对其他语言(如C++模板)中的类似特性有所了解,你也会发现Java泛型既有相似之处,也有其独特之处。对于初学者而言,没有先入为主的观念将有助于更好地理解和掌握Java泛型。 #### 简单泛型定义 泛型最常用于...
早期的面向对象语言,如Java,通过使用单一基类(如`Object`)的方法来实现泛型容器,这种方式在C++中并不适用,原因在于: 1. **单根继承的限制**:C++中不强制实行单根继承,这意味着不能简单地通过所有对象继承...
**类型擦除**是Java泛型的关键特性,意味着在编译后,泛型类型信息会被删除,只保留原始类型。这一机制使得Java的泛型与C++的模板机制有所区别,并导致了一些特殊的规则和限制: - **没有独立的泛型类Class对象**:...
通过泛型,我们可以限制容器类存储的数据类型,避免了强制类型转换,同时在编译时就能检测出可能的类型错误。例如,ArrayList就是泛型的一个实例,其中T代表一个类型参数,实际使用时可以替换为具体的类型如String或...
Java的泛型特性是其语言的一个重要组成部分,自Java SE 1.5版本引入以来,极大地增强了代码的类型安全性,同时也提高了代码的可读性和复用性。...理解和熟练使用泛型是每个Java开发者必备的技能之一。
閱讀本文之前,如果自覺基礎不夠,可以補充閱讀適才提到的《Java泛型技術之 發展》,那是一篇非常完整的文章,可助您完整認識泛型技術的來龍去脈。 Sun JDK的泛型發展歷史要從 1.3版說起。該版本配合 GJ,正式...
在实际应用中,我们可以为泛型集合添加、删除、查找和遍历元素,所有这些操作都会受到类型限制。例如,我们可以这样添加一个Computer对象到集合: ```java Computer myComputer = new Computer("Dell", "Inspiron")...
转换器需要将模板转换为Java的泛型,但要注意Java泛型的边界和限制。 4. **异常处理**:C++的异常处理与Java的有所不同。转换器需要将C++的try-catch-finally块转换为Java的异常处理机制。 5. **内存管理**:C++...
泛型不支持基本数据类型,比如int、long等,因为这些类型在Java中不是对象类型,而是Java泛型机制基于Java的类型系统设计。泛型集合在编译后会取消其泛型类型信息,而转为使用原始类型,例如List会变为List。 泛型...