for-泛型除了标示类还有其他的作用吗?

问题描述

泛型除了标示类还有其他的作用吗?
 public static void main(String[] args) {
        ArrayList<String> list=new ArrayList<String>();
        list.add("hello");
        list.add("world");
        list.add("java");
        for(String i : list){
            System.out.println(i);
        }

    }

为什么不声明泛型String之后用foreach遍历就会报错?泛型在这里起到的作用是什么.?

解决方案

for-loop的底层使用的是iterator,试想你的程序编译器转化后和以下代码一致,就没问题
Iterator i = list.iterator();
while(iter.hasNext()) {
String i = iter.next(); //iterator.next()是string类型
}
如果不用范型,你的程序就是
Iterator iterator = list.iterator();
while(iterator.hasNext()) {
String i = iterator.next(); // 看到问题了么,这里iteraotr.next()是object,类型转换失败啊
}

解决方案二:

泛型限定了list的add方法只能添加进去string,而不能是别的类型。也保证了遍历的时候,取出来的都是string。
不知道你说的“不声明泛型String”报错是什么意思。本身你也可以用ArrayList的非泛型版本。
至于报错,肯定是你写的不合语法而已。

时间: 2024-11-02 22:17:31

for-泛型除了标示类还有其他的作用吗?的相关文章

java当中的泛型类问题,类泛型参数是类的问题

问题描述 java当中的泛型类问题,类泛型参数是类的问题 类1<类2> 这样子写的话 类1和类2的选取范围是什么类<类>类的泛型是类的本身,这种写有错吗 解决方案 一般来讲,我们用到"类1<类2>"这样的形式的Java语句,通常是希望将范围比较大的类1里面所包含的内容规范化成类2:举个简单的例子,我们通常会在创建集合的时候限定集合里面的内容的类型,如:List.这意味着这个List集合里的内容都是字符串类型,而不会是Long或其他,这样就会在我们操作

java-JAVA 反射构造函数带泛型参数的类

问题描述 JAVA 反射构造函数带泛型参数的类 JAVA 反射构造函数带泛型参数的类 比如说: public class User<T extends Person> { private T rootType; public User(T rootType){ this.rootType = rootType; } @Override public String toString() { return "User [rootType=" + rootType + "

java-EditText.getText()方法中返回Editable类型值有何作用?

问题描述 EditText.getText()方法中返回Editable类型值有何作用? 根据说明,EditText的getText()方法返回值Editable,这有什么特别的用处么?能不能用返回string类型代替? 官方对editable的说明: This is the interface for text whose content and markup can be changed (as opposed to immutable text like Strings). 实现不可修改功

泛型DAO基类存在的理由仅仅就是为了方便吗?Mybatis需要这东西吗?

问题描述 某曾用过hibernate,代码是别人留下来的.DAO层实现了一个泛型的baseDao实现,所有其它Dao实现类均继承了它,因此大多数Dao实现类一行代码都不用写,即可实现大部分CRUD,感觉确实挺方便的.现在开始用mybatis,别人都说它不需要泛型DAO,一张表对应一个mapper,对应一堆sql语句即可.但是编辑起来一个表就要有一堆sql语句工作量确实比hibernate一个泛型DAO通杀90%以上情况大不少,难道mybatis的灵活的代价就是更多的工作量吗? 解决方案 貌似有个

绑定子类的泛型基类,反模式?

 这次总结一个个人认为的反模式:"绑定子类的泛型层基类",这个模式在一些著名的框架中也见到过,如果CSLA.BlogEngine.我自己在原来的写的框架中,也用到过.     当然了,个人认为是反模式,各们同仁并不一定这样认为,仁者见仁,智者见智了.不过我好几次都是受尽折磨,所以决定写出来给大家分享下心得.   模式介绍     "层基类"是MF提出的一个基本模式,详见:<Layer Supertype>.这种模式在经典的层次型架构设计的实现中,是极其重

问一个Java泛型与类继承的问题

问题描述 问一个Java泛型与类继承的问题 直接上代码了 //DeviceRepository类 public abstract class DeviceRepository<T extends Device> extends DomainRepository<T> //DeviceEventHandler类第一种写法 public abstract class DeviceEventHandler<M extends Device,R extends DeviceRepos

C#2.0 Specification(泛型二)

接(泛型一)这篇文章是翻译的微软的技术文章.供学习c#的朋友参考,请勿用于商业目的.http://msdn.microsoft.com/vcsharp/team/language/default.aspx20.1.6泛型类中的静态构造函数在泛型类中的静态构造函数被用于初始化静态字段,为每个从特定泛型类声明中创建的不同的封闭构造类型,执行其他初始化.泛型类型声明的类型参数在作用域之内,可以在静态构造函数体内被使用. 如果下列情形之一发生,一个新的封闭构造类类型将被首次初始化. 一个封闭构造类型的实

C#中的泛型 (From dotNet SDK 2.0 Beta1)

泛型(generic)是C#语言2.0和通用语言运行时(CLR)的一个新特性.泛型为.NET框架引入了类型参数(type parameters)的概念.类型参数使得设计类和方法时,不必确定一个或多个具体参数,其的具体参数可延迟到客户代码中声明.实现.这意味着使用泛型的类型参数T,写一个类MyList<T>,客户代码可以这样调用:MyList<int>, MyList<string>或 MyList<MyClass>.这避免了运行时类型转换或装箱操作的代价和风

Classworking工具箱: 分析泛型数据结构

应用类型替换深入挖掘使用泛型的程序的细节 简介:Java 5 泛型把详细的类型信息编码到类文件中.许多类型的工具都可以从全面的类型 信息提供的改进的数据结构中受益,但是要把这个信息变成有用的形式可能有些困难.为了让这个工作更 容易些,系列作者 Dennis Sosnoski 围绕 ASM Java 字节码操纵框架构建了一个数据结构分析程序,可 以解释泛型信息,为应用程序使用的数据的实际数据类型创建深度的视图. 类处理工具实际上就是一个把其他程序当成数据的程序,通常会修改或重新塑造目标程序,以满足