关于泛型实例声明类型的问题,问题在注释里面

问题描述

关于泛型实例声明类型的问题,问题在注释里面
class Employee{

}

class Manager extends Employee{

}
class CEO extends Manager{

}
public class Test{
public static void main(String[] args) {
List<? super Manager> list=new ArrayList();
//请问,new ArrayList()中,这里面的Manager有什么用吗?
list.add(new Manager());
list.add(new CEO());
}
}

解决方案

限制list的泛型参数必须是manager或者它的派生类。

解决方案二:
希望各位能回答小弟这个问题,感激不尽!!!

解决方案三:
<? super T> 表示以T类型为下限的某种类
实例化的时候对象的泛型一定要大于等于T类型(也就是T的父类或自己) ;
使用的时候类型一定要小于等于T类型(也就是T的子类或自己)
list.add(new Manager()); //操做成功
list.add(new CEO()); //成功
list.add(new Employee()); //编译器报错,因为Employee是Manager的父类

时间: 2024-10-23 23:23:28

关于泛型实例声明类型的问题,问题在注释里面的相关文章

Java 泛型实例详解_java

理解Java泛型最简单的方法是把它看成一种便捷语法,能节省你某些Java类型转换(casting)上的操作: List<Apple> box = ...; Apple apple = box.get(0); 上面的代码自身已表达的很清楚:box是一个装有Apple对象的List.get方法返回一个Apple对象实例,这个过程不需要进行类型转换.没有泛型,上面的代码需要写成这样: List box = ...; Apple apple = (Apple) box.get(0); 很明显,泛型的主

编写高质量代码改善C#程序的157个建议[优先考虑泛型、避免在泛型中声明静态成员、为泛型参数设定约束]

原文:编写高质量代码改善C#程序的157个建议[优先考虑泛型.避免在泛型中声明静态成员.为泛型参数设定约束] 前言 泛型并不是C#语言一开始就带有的特性,而是在FCL2.0之后实现的新功能.基于泛型,我们得以将类型参数化,以便更大范围地进行代码复用.同时,它减少了泛型类及泛型方法中的转型,确保了类型安全.委托本身是一种引用类型,它保存的也是托管堆中对象的引用,只不过这个引用比较特殊,它是对方法的引用.事件本身也是委托,它是委托组,C#中提供了关键字event来对事件进行特别区分.一旦我们开始编写

java se-使用泛型打印输出任意类型的数组,为什么调用时有错误?

问题描述 使用泛型打印输出任意类型的数组,为什么调用时有错误? import java.util.Arrays; public class FanXing { public static void printMatrix(T[][] matrix){ for(int i=0;i<matrix.length;i++){ System.out.println(Arrays.toString(matrix[i])); } } public static void main(String[] args)

WCF分布式开发步步为赢(9):WCF服务实例激活类型编程与开发

.Net Remoting的激活方式也有三种:SingleTon模式.SingleCall模式.客户端激活方式,WCF服务实例激活类型包括三种方式:单调服务(Call Service),会话服务(Sessionful Service),单例服务(Singleton Service).他们之间有什么联系.WCF服务激活类型的优势和缺点,以及如何在项目里编程开发和设置服务实例.全文分为5个部分,首先一次介绍单调服务(Call Service),会话服务(Sessionful Service),单例服

java 接口 接口实现-接口,泛型,包装类型

问题描述 接口,泛型,包装类型 接口名有什么要求?泛型有什么作用?包装类型具体用在哪呢?求大神讲解. 解决方案 接口名有的公司要求加i,有的不要求,命名基本上都 是大写开头+名词组成 泛型就是不指定类型,而是等运行时来指定.这样可以减少代码量,有利于代码维护,提高整个程序的健状性.特别是在反射中更是常用到,而且还可以指定类型的范围. 包装类型很多时候都 是自动调用的.拆包和装包的过程java中大部分时候都有帮你搞定.具体用在哪?这个得看你自己怎么来定义数据.怎么来传递数据. 一般情况下,数据库对

java-JAVA serializable 类 未声明类型为 long 的静态终态

问题描述 JAVA serializable 类 未声明类型为 long 的静态终态 新手,就是完全照书上码了一段,但怎么会有这些提示? ![ 图片说明](http://img.ask.csdn.net/upload/201502/18/1424249621_652792.png) 还有一张传不上去 这都是些什么问题?麻烦大致讲下 谢谢 代码如下 import java.awt.Container; import java.awt.FlowLayout; import java.awt.even

C# 泛型 无法将类型xx隐式转换为“T”

原文:C# 泛型 无法将类型xx隐式转换为"T" 直接奖泛型转为T是不能转换的 要先转Object 例:  public static T GetValue<T>(string inValue) { if (typeof(T) == typeof(Bitmap)) { return (T)(Object)new Bitmap(inValue); } else { //一般类型 return (T)Convert.ChangeType(inValue, typeof(T));

Objective—C语言的新魅力——Nullability、泛型集合与类型延拓

Objective-C语言的新魅力 一.引言         在Xcode7中,iOS9的SDK已经全面兼容了Objective-C的一些新特性和新功能.这些功能都只作用于编译期,对程序的运行并没有影响,因此,它可以很好的向下进行兼容,无缝的衔接低版本的iOS系统,那么这些特性有什么样的用处呢,作为开发者,我保证你一定会爱上他们,如果你可以将这些新特性都应用于你的开发,你的开发效率和代码质量,相比之前,会有一个很大的提升. 二.Nullability检测的支持         在swift语言中

如何改造Dapper,使其遵循实体的属性(字段)声明类型

问题描述 请懂得Emit代码的高手,帮助解答下:Dapper的泛型赋值是以IDataReader相应的字段(或自定义绑定的数据库字段)类型来做赋值的,现在想使其遵循实体中属性定义的类型来赋值,如何改造?1.例如,数据库中,OrderNumber是number(5)类型的,但我的实体T中,OrderNumber是string类型的:我想要Dapper实现以T类型的string为基准的赋值2.可能隐含了小数值范围向大数值范围的转换,如:SN在数据库中是number(3),但在实体T中,SN是deci