导航:首页 > 操作系统 > android泛型list

android泛型list

发布时间:2022-07-14 02:57:11

❶ 怎么获取一个泛型List的元素类型

package test;

import java.util.ArrayList;
import java.util.List;

public class Test01 {

public static void main(String[] args) {
List strings = new ArrayList();
strings.add("123");//模拟返回一个泛型

System.out.println(strings.getClass());//第一次取类型
System.out.println(strings.get(0).getClass());//假如通过第一步知道是ArrayList类型,则再取类型
}
}

❷ 在android中 List 和ArrayList的区别,越详细越好

List是一个接口,而ArrayList是List的一个实现类,对于android和J2SE来讲,两者之间的区别不大。

❸ java中泛型List问题

您好,我用断点调试解释吧[真的很高兴能与你讨论][啊啦上回不好意思但还是说对一部分滴].
1-----你在go方法中,没有给list限制泛型约束,所以1.1不加check的存储进arraylist了.

2-----"1.1"是被内部机制转换为Double存储进arraylist的:

[在System.out.println(list.get(1));处下断点,点调试.可以看到list里是
[1, 1.1],
elementData[]为
[1, 1.1, null, null, null, null, null, null, null, null].
elementData[0]的值是"1",
elementData[1]的值为Double (标识=37).]

也就是说,go方法add时因为没有约束,所以由内部机制将1.1转换为Double存入了以String为约束的list里.

3-----点"单步跳入",看到代码跳到了arraylist的get里:
public E get(int index) {
RangeCheck(index);

return elementData[index];
}
关键点就在这了,由第2步看到elementData[1]的类型为Double,而在main里为list设置的约束是String,所以E 为String.上面的代码就变为:
public String get(int index) {
RangeCheck(index);

return 1.1; //double
}
继续跳,
看到他照样返回了一个加着String标签的double值.

4-----继续点然后报错了.这个是由于syso输出是输出String.这个后面会说.

如果你加一个方法:
public static void go1(List list)
{
System.out.println(list.get(1));
}
这样没约束的情况下syso,是没有错的.因为get后的对象没有加类型标签,会由内部机制判断他到底是哪个类.
而加了String返回类型标签后就不做判断直接调用syso(String)的方法来输出Double了.所以报告了class cast错误.
如果你继续看,会看到是String类的init出现的错误.
因为前面调试中看到syso(args)的args为String[],而返回的却是Double.类型没匹配上.

正确的那个例子不用说了吧,调试一下会发现他syso时String.valueof(obj)了,"1.1"肯定满足条件.[如果不满足条件,会打印object,这也是能输出syso(list)的原因][SYSO在控制台输出的是字符,如果是double会转为字符输出]

而错的那个因为返回标明了是String,所以程序不加判断就直接write了,输出字符却给个double,就出错了.

上班了...打一中午,555,可能说的有错误,楼主自己调试一下,以自己的方式理解一下吧>_<
PS:其实俺上回说的有一部分对...我楼上那位5级大哥说的也部分对,但1.1是double传进去的,没转换成int.调试过我就明白了,一开始我也那么想.

❹ List集合使用泛型与不使用泛型有什么区别

泛型其实还有一个通俗的名字:参数化类型(使用参数指明了该传什么类型)。就是明确指定了运行期集合中对象的类型。如果没有泛型,那我一切的对象直接使用Object和强制类型转换就解决了不是吗?但是这种有个问题,就是会在运行期出现随处可见的强制类型转换异常ClassCastException。而指定了参数化类型,是不是我们在编译期就进行检查了,传入List<String>类型,List里面只能放入String,你add其他类型编译不会通过的,就不要提运行期检查了。。。所以你提泛型搞不懂就理解为参数化类型这个事就完事了

❺ java 泛型 List 怎么当做函数的传递参数

不行你这样肯定改不了,
List<Entity1> e1=new ArrayList<Entity1>();//这句话拿到方法外面,e1必须是静态的。
否则你的操作怎么农弄都失败

import java.util.ArrayList;
import java.util.List;

public class Entity2 {
List<Entity1> e1=new ArrayList<Entity1>();
private void setEntity1(Entity1 e) {
e1.add(e);
}
public List<Entity1> getEntity1(){
return e1;
}
public void updateEntity1(Entity1 e) {
//-----------------根据条件修改
}
}

❻ java泛型List<>用法

1.1 list.get()返回类型为?,所以你只能用Object接收,Object足以确保type-safe,因为java中任何class都是Object的subclass。(当然,如果你非要使用类型强制转换,转换成什么阿猫阿狗的class,也没人拦得住你,对此只能说“编译器尽力了,你行你上啊”,反正ClassCastException什么的最有爱了)
2.2 list.put()除了null以外,任何参数都不接收。这也足以确保list中类型的type-safe,要知道,java的泛型的implementation是基于ERASURE(擦除)的,举个具体的例子,LinkedList<E>的内部数据结构肯定是基于Node<E>,那么一个Node有2个field,E element和Node<E> next,而实际上在runtime环境中,LinkedList<String>中的Node并不是Node<String>,仅仅是Node,Node里面的element的类型也不是String,仅仅是Object,也就是说,compile-time的type-information都被抹除了(Quote: For backward-compatibility)。试想这么一个情景,Tom传了一个List<Dog>给Mike,Mike的interface是List<?>,Mike往list中放了一个Cat(假设compiler没有阻止Mike),然后Tom取出该List中所有的object并当成Dog使用(compiler会自动加上类型转换的代码——which is how java generics worked),然后Tom就悲剧地得到了一个ClassCastException——这就是为什么除了null其他参数都不接收的原因——阻止Mike随便放东西进去。
2、List
raw-type就是这么个情况,相当于你对compiler说:“我并不在乎这个List里面的element的runtime-type是什么,不管我怎么操作这个list或者list中取出来的object,你都别管,实在看不过去就给我个warning就行了”。这种情况下:
2.1 list.get()返回类型为Object,当然,也是type-safe的(如果你不强制转换的话)
2.2 list.put()的参数类型为Object,也就是说,你爱往里面放什么object就放什么object,还是上面那个例子,就算Tom给Mike的是List<String>,但由于Mike的interface是List,所以Mike放个BigInteger甚至什么Cat、Dog,compiler都不会阻止Mike(但是,要知道,Mike是无法得知其他人会怎么使用这个List的,比如说Mike无法得知Tom相信编译器确保了list中的object都是String,但是由于Mike的raw-type interface,Tom就难免吃ClassCastException咯)

❼ java中泛型 例如List<>这个<>内存放的是什么 帮忙分析一下下面程序

泛型集合!!
指定List存放的类型;

程序分析:
这个程序是对数据库T_YW_KHXXB表进行查询的操作;

1.定义T_YW_KHXXB表所对应的实体Bank 其中每个属性与T_YW_KHXXB表中的字段一一对应
2.声明sql查询语句 String sql = "SELECT DH,DZ,KHBH,ZJHM,XM FROM T_YW_KHXXB";
3.List<Bank> list = new ArrayList<Bank>();定义一个集合存储Bank尸体对象对象
4.PreparedStatement ps = con.prepareStatement(sql);
ResultSet rs = ps.executeQuery();
执行SQL语句并返回ResultSet对象集(结果集)
5.把结果集读取出来并存入List集合对象当中,让后返回这个List集合对象

❽ JAVA中List泛型和ArrayList泛型的关系和区别

List是一个接口 ArrayList是LIst接口下的一个实现类
List<UserVo> list = new ArrayList<UserVo>();
子类的对象动态的指向父类
这样的好处是
ArrayLIst可以随便改变实现类 而list对象不用变
比如
List<UserVo> list=new LinkedList<UserVo>();

❾ android java 泛型多吗

泛型,即“参数化类型”。一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。那么参数化类型怎么理解呢?顾名思义,就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参),然后在使用/调用时传入具体的类型(类型实参)。
看着好像有点复杂,首先我们看下上面那个例子采用泛型的写法。
public class GenericTest {

public static void main(String[] args) {
/*
List list = new ArrayList();
list.add("qqyumidi");
list.add("corn");
list.add(100);
*/

List<String> list = new ArrayList<String>();
list.add("qqyumidi");
list.add("corn");
//list.add(100); // 1 提示编译错误

for (int i = 0; i < list.size(); i++) {
String name = list.get(i); // 2
System.out.println("name:" + name);
}
}
}

❿ java中使用list泛型新增数据问题

List<String> l = new ArrayList<String>(); 检查一下在你的工程里已经有个一类叫String 所以编译器默认的是你定义的String 类 而不是java.lang.String 就会出现你所说的报错 如果检查清楚不是这个问题的话 尝试clean一下你的工程看下

阅读全文

与android泛型list相关的资料

热点内容
gz压缩文件夹 浏览:177
字母h从右往左跑的c语言编程 浏览:127
安卓手机如何拥有苹果手机横条 浏览:765
业余编程语言哪个好学 浏览:137
按照文件夹分个压缩 浏览:104
航空工业出版社单片机原理及应用 浏览:758
如何在电信app上绑定亲情号 浏览:376
安卓的怎么用原相机拍月亮 浏览:805
配音秀为什么显示服务器去配音了 浏览:755
c盘清理压缩旧文件 浏览:325
app怎么交付 浏览:343
图虫app怎么才能转到金币 浏览:175
如何做征文app 浏览:446
用什么app管理斐讯 浏览:169
安卓如何下载宝可梦剑盾 浏览:166
编译器开发属于哪个方向 浏览:940
megawin单片机 浏览:687
以色列加密货币监督 浏览:909
程序员前端现在怎么样 浏览:499
服务器和接口地址ping不通 浏览:557