java中泛型怎么强制转换

java中泛型怎么强制转换classBextendsApublicList<A>getList(){...}getList方法返回的是List<A>.我现在非常确切的指导... java中泛型怎么强制转换
class B extends A
public List<A> getList() {
...
}
getList方法返回的是List<A>.我现在非常确切的指导List里的都是B.怎么强转成List<B>啊...跪求...谢谢...
主要是B当中有其他的方法.需要调用B里的...
如果是泛型A的话,那只能调用父类A中的方法...
所以我需要强转.
展开
 我来答
百度网友1c0d5b8
推荐于2018-02-10
知道答主
回答量:19
采纳率:0%
帮助的人:16.1万
展开全部
首先你的问题得明确一些
如果把List<B>转成B,则不用转,直接B b = list.get(2)。
如果把List<B>转成A,也不需要强制转换,因为A是B的父类。父类的引用可以直接指向之类的对象,而不需要强制转换。A a = list.get(2);就可以完成。
如果把List<A>转成B,这需要强制转换。也很简单B b = (B)list.get(2);但是,前提是,当你把对象装入List<A> list的时候,你必须实例化B对象,否则会报错!
以下是第三种不会报错情况的代码,比较简陋,但运行正确,分析原理足矣!
package a;

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

public class A {
public int sign = 1;
public List<A> getList(){
List<A> l = new ArrayList<A>();
for(int i=0;i<5;i++){
l.add(new A(i));
}
return l;
}
public A(int s){
this.sign = s;
}

}
package a;

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

public class B extends A {

public B(int s) {
super(s);
// TODO Auto-generated constructor stub
}
/**
* @param args
*/
public static void main(String[] args) {
B b = new B(1);
List<A> list = b.getList();
for(int i=0;i<5;i++){
A a = list.get(i);
B bb = (B)list.get(i);
System.out.println("A:"+a.sign+" B:"+bb.sign);
}
}

public List<A> getList(){
List<A> l = new ArrayList<A>();
for(int i=0;i<5;i++){
l.add(new B(i));
}
return l;
}
}

楼主可以把B中的new B(i)改成new A(i) ,编译不报错,运行就会错了!
千锋教育
2015-12-06 · 做真实的自己 用良心做教育
千锋教育
千锋教育专注HTML5大前端、JavaEE、Python、人工智能、UI&UE、云计算、全栈软件测试、大数据、物联网+嵌入式、Unity游戏开发、网络安全、互联网营销、Go语言等培训教育。
向TA提问
展开全部
由高级数据类型向底数据类型转换时使用强制转换,例如:int类型的要转换成byte类型的时候就要用强制类型转换。

一般强制转换会导致数据丢失,应尽量避免。例如:

int a = 365;

byte b;

b = (byte)a; //强制转换后丢失一部分数据,使得b的值为100。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
daay1986
2011-11-07 · TA获得超过6018个赞
知道大有可为答主
回答量:2208
采纳率:0%
帮助的人:1472万
展开全部
用instanceof一个一个判断,一个一个转,不然编译器肯定报错。只能这样了,而且可以躲过编译器的警告,否则即便是子类转父类还有警告,这样就没警告了
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友951d77399
2015-10-26 · 超过61用户采纳过TA的回答
知道小有建树答主
回答量:98
采纳率:0%
帮助的人:130万
展开全部
if (me instanceof type) {
    type new_name = (type) me;
}

me是泛型的变量,type是你要转换的类型

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
味洋扛590
2011-11-07 · TA获得超过1647个赞
知道小有建树答主
回答量:1640
采纳率:100%
帮助的人:822万
展开全部
LIst<B> listB = new ArrayList<B>()
遍历List<A> 然后把集合中的每个A强转成B,然后在把B放到listB中
追问
...
目前我就是遍历后强转..
想知道有没有其他的办法..
追答
这个还真的没想到
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(6)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式