问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

java中的泛型 求详细解释

发布网友 发布时间:2022-04-22 06:26

我来回答

3个回答

热心网友 时间:2023-05-07 19:10

1、Java泛型
其实Java的泛型就是创建一个用类型作为参数的类。就象我们写类的方法一样,方法是这样的method(String str1,String str2 ),方法中参数str1、str2的值是可变的。而泛型也是一样的,这样写class Java_Generics<K,V>,这里边的K和V就象方法中的参数str1和str2,也是可变。下面看看例子:
//code list 1
import Java.util.Hashtable;
class TestGen0<K,V>{
 public Hashtable<K,V> h=new Hashtable<K,V>();
 public void put(K k, V v) {
h.put(k,v);
 }
 public V get(K k) {
return h.get(k);
 }
 public static void main(String args[]){
TestGen0<String,String> t=new TestGen0<String,String>();
t.put("key", "value");
String s=t.get("key");
System.out.println(s);
 }
}
正确输出:value
这只是个例子(Java中集合框架都泛型化了,这里费了2遍事.),不过看看是不是创建一个用类型作为参数的类,参数是K,V,传入的“值”是String类型。这个类他没有特定的待处理型别,以前我们定义好了一个类,在输入输入参数有所固定,是什么型别的有要求,但是现在编写程序,完全可以不制定参数的类型,具体用的时候来确定,增加了程序的通用性,像是一个模板。
呵呵,类似C++的模板(类似)。
1.1. 泛型通配符
下面我们先看看这些程序:
//Code list 2
void TestGen0Medthod1(List l) {
 for (Object o : l)
System.out.println(o);
}
看看这个方法有没有异议,这个方法会通过编译的,假如你传入String,就是这样List<String>。
接着我们调用它,问题就出现了,我们将一个List<String>当作List传给了方法,JVM会给我们一个警告,说这个破坏了类型安全,因为从List中返回的都是Object类型的,而让我们再看看下面的方法。
//Code list 3
void TestGen0Medthod1(List<String> l) {
 for (Object o : l)
System.out.println(o);
}
因为这里的List<String>不是List<Object>的子类,不是String与Object的关系,就是说List<String>不隶属于list<Object>,他们不是继承关系,所以是不行的,这里的extends是表示*的。
类型通配符是很神奇的,List<?>这个你能为他做什么呢?怎么都是“?”,它似乎不确定,他总不能返回一个?作为类型的数据吧,是啊他是不会返回一个“?”来问程序员的?JVM会做简单的思考的,看看代码吧,更直观些。
//code list 4
List<String> l1 = new ArrayList<String>();
li.add(“String”);
List<?> l2 = l1;
System.out.println(l1.get(0));
这段代码没问题的,l1.get(0)将返回一个Object。
  1.2. 编写泛型类要注意:
1) 在定义一个泛型类的时候,在 “<>”之间定义形式类型参数,例如:“class TestGen<K,V>”,其中“K” , “V”不代表值,而是表示类型。
2) 实例化泛型对象的时候,一定要在类名后面指定类型参数的值(类型),一共要有两次书写。例如:
TestGen<String,String> t=new TestGen<String,String>();
3) 泛型中<K extends Object>,extends并不代表继承,它是类型范围*。
2、泛型与数据类型转换
2.1. 消除类型转换
上面的例子大家看到什么了,数据类型转换的代码不见了。在以前我们经常要书写以下代码,如:
//code list 5
import Java.util.Hashtable;
class Test {
 public static void main(String[] args) {
Hashtable h = new Hashtable();
h.put("key", "value");
String s = (String)h.get("key");
System.out.println(s);
 }
}
这个我们做了类型转换,是不是感觉很烦的,并且强制类型转换会带来潜在的危险,系统可能会抛一个ClassCastException异常信息。在JDK5.0中我们完全可以这么做,如:
//code list 6
import Java.util.Hashtable;
class Test {
 public static void main(String[] args) {
Hashtable<String,Integer> h = new Hashtable<String,Integer> ();
h.put("key", new Integer(123));
int s = h.get("key").intValue();
System.out.println(s);
 }
}
这里我们使用泛化版本的HashMap,这样就不用我们来编写类型转换的代码了,类型转换的过程交给编译器来处理,是不是很方便,而且很安全。上面是String映射到String,也可以将Integer映射为String,只要写成HashTable<Integer,String> h=new HashTable<Integer,String>();h.get(new Integer(0))返回value。果然很方便。

热心网友 时间:2023-05-07 19:10

泛型是JDK1.5才支持的 就是为了更好的实现多台 以前都是用Object 作为参数 现在用了泛型 管理起来就更方便 比如List<String> l = new ArrayList<String)();这样你就只能装String类型的其他的类型不可以 然后就是String s = l.get(1);返回的就是String类型 不必进行从Object向下转型为String类型 然而如果是JDK1.5以前的版本 的话 没有泛型 就是List l = new ArrayList(); 然后你的这样写 String s = (String)l.get(1); 你甚至可以乱来 String s = (Cat) l.get(1); 这样编译没错 运行报错 但是有了泛型你编译就错了 错误总是提前的好,尽量在编译期间揪出来!泛型方便 而且灵活的实现了多态,编程就是要往这方面发展!

热心网友 时间:2023-05-07 19:11

泛型,即通过参数化类型来实现同一份代码上操作多种数据类型。使代码更强的类型安全,更好的复用,更高的效率,更清晰的约束
java中&lt;&gt;

这叫范型,或者泛型!主要用去规定你这个集合中出现的数据类型!例子:一个弯可以装很多种食物,加上范型,比如是面,那么这个碗只能是装上面这类的食物的!

java中泛型是怎么做到类型安全的?

泛型可以确保我们定义的类型是安全的,不会出现转换出错问题等。1.不再需要强制转型;2.编辑器增加了强制检查集合中的对象类型的功能,避免了在Girl的集合中出现Boy对象的问题(虽然有的时候是我们所期待的)如:public class Query{ private T t;public T get(){...};public void set(T t){...};...

java中的ArrayList&lt;Student&gt; students=new ArrayList&lt;Student&gt;();什么...

students.add(...);//假定需求是在studnets里存放student对象 但是List是一个集合,它是可以存任意对象的 假如不用泛型来限定对象类型 在add时 完全有可能students.add(Teacher),这个在编译是允许的,但是当你遍历List取出来的时候就会有问题了 你知道用什么类型取吗 用Student取那你当中存的Teacher肯...

java 中返回值和传入参数中的 像List&lt;T&gt;和 List&lt;?&gt;这样的类型怎么理解...

List&lt;?&gt;表示任何类型都可以,但是由于类型不能确定,所以如果你要操作add之类是会报错的,因为他不能确定你现在添加的类型是不是符合List要求的类型,,所以你要转化,如:List&lt;?&gt; list=new ArrayList&lt;String&gt;();List&lt;String&gt; list2=(List&lt;String&gt;)list;List&lt;T&gt;一般是指特定的类型才可以,比如class实现某...

.NET 关于泛型的协变和逆变中 in / out 两个参数(或者方法) 的使用...

用来表明传入传出参数的,比如IEnumerable的Current的T就是一个out,这样IEnumerable&lt;string&gt;就可以赋值给IEnumerable,因为Current是一个取值的属性(输出 out)所以使用object引用子类string是没问题的。而in表明输入参数,比如IComparer的Compare接受两个T的参数标明为in,这样ICompare可以传给ICompare&lt;string&gt;...

求大神告知 下面这个 java code是什么意思啊??

//括号中是参数传入的是一个Map类型的参数 map SortedSet&lt;Map.Entry&lt;K,V&gt;&gt; sortedEntries = new TreeSet&lt;Map.Entry&lt;K,V&gt;&gt;(//实例一个对象 sortedEntries 他接收的是一个TreeSet类型的变量保存的是指定的类型 //也就是Map.Entry&lt;k,v&gt;类型 new Comparator&lt;Map.Entry&lt;K,V&gt;&gt;() { //排序没...

各位有没有详细讲Python泛型的资料

一个泛型函数G,可以被调用,这种行为类似一个普通函数(取参数并返回一个值),但其实现是可扩展的(extensible),并可以在不同的模块中进行定义。TG包含一个由复合类型参数的元组索引的注册表实现。假设我们想让具有两个参数的G可调用,那么注册表将会把成对了类型组(type pairs)映射到实现的函数中...

如何解决Java问题: 使用了未经检查或不安全的操作。有关详细信息, 请...

这是一个警告的JDK1.5,JDK1.5增加了对泛型的支持,这将有一个集合里面的数据类型检查。如果你使用泛型时,没有指定的信息类型(名单&lt;your对象&gt;列表=新的ArrayList &lt;你的对象&gt;的(),其中,“对象”类型的信息),你可以不检查给定的参数遵守的要求出现unchecked警告,这并不影响程序的运行。

编程中VB跟VC指的是什么 请详细说清楚...

而泛型、运算符重载等功能又可以让Visual Basic的开发人员深入.NET Framework的全部功能,开发出最优秀的应用程序。 2008-功能极强且最易用的 Visual Basic 新版本的VB2008 具有下列新功能和加强功能 1、Language-integrated query: 可以让使用者在VB2008中进行资料查询。 2、物件关联式设计工具会协助开发人员建立和...

java是以哪种语言为基础(java语言是以哪一种语言为基础)

在Java1.5版本中,Java又引入了泛型编程(GenericProgramming)、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。 Java不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台...

深入理解java泛型详解 java中的泛型怎么用 java的泛型是什么 java泛型的优点 java是解释型语言 java为什么是解释型语言 java泛型使用 java泛型方法 java泛型数组
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
最火的欧美铃声排行榜(35岁男人用的手机铃声) 备孕吃什么好 吃芝麻酱可防胎儿畸形 备孕吃什么好 5类食物备孕女人一定... 准妈妈吃出芝麻酱的几大好处 ...上是所有北方人火锅必备,它除了好吃之外,还有什么其他功效? 森内贵宽扩展 森内贵宽森内贵宽---森田贵宽---Taka 森内贵宽基本信息 日本哪些乐队组合的歌曲是最棒的? 求NEWS成员里声音很孩子气的成员 cctvnews 里面播过的一个乐队的歌 女主唱 歌曲很有特点 歌曲只放了一... 传说之下mettaton怎么打 提交了中国银行中银E贷贷款申请多久可以审批 传说之下热域mtt算不算怪物? QQ设备锁怎么解除。绑定的手机丢了。号登不上,一... java中泛型的使用 制作课件需要哪些技能? 广西特色食材有什么? 传说之下mtt酒店的电梯有什么用? java中泛型指的是什么 中国银行中银E贷申请需要多长时间处理? 北方具有特色的菜品是什么? 课件制作需要注意哪些问题 传说之下屠杀线核心杀了MTT最后一个怪在哪里? qq有设备锁 手机丢了 登不上qq怎么办 申请中国银行中银E贷需要多久 中国的特色健康食物 java中什么是泛型,怎么用泛型? 假如我QQ的设备锁的手机号掉了怎么办? 山东除了有大饼卷葱的特色食物,还有什么美食? 中国银行中银E贷款审批需要多长时间 中国银行中银E贷的审批要多长时间 厦门有哪些特色食物 jmeter快捷方式无效,只能在原文件夹里打开? QQ号设备锁打开了,绑定的手机号也丢了,现在登不... 传说之下和平线能杀mtt吗 钵钵鸡是以鸡肉及其附产品作为特色食材,你吃过吗? java中泛型是什么意思,作用是什么? jmeter之怎么减负 中国银行中银E贷额度期限多久,到期后如何重新激活 ppt的制作需要的东西 jmeter压力测试平均响应时间为17秒正常吗 对java泛型的理解? 中银e贷可以贷多久 各个国家都有那些特色食物? 传说之下MTTNEO为啥不打我 java中什么叫泛型 Jmeter工具你会哪些功能? 申请的中国银行中银E贷什么时候放款到账? 傈僳族的特色食物是什么? 课件制作需要什么知识