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中的方法...
所以我需要强转. 展开
class B extends A
public List<A> getList() {
...
}
getList方法返回的是List<A>.我现在非常确切的指导List里的都是B.怎么强转成List<B>啊...跪求...谢谢...
主要是B当中有其他的方法.需要调用B里的...
如果是泛型A的话,那只能调用父类A中的方法...
所以我需要强转. 展开
8个回答
展开全部
首先你的问题得明确一些
如果把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) ,编译不报错,运行就会错了!
如果把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。
一般强制转换会导致数据丢失,应尽量避免。例如:
int a = 365;
byte b;
b = (byte)a; //强制转换后丢失一部分数据,使得b的值为100。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
用instanceof一个一个判断,一个一个转,不然编译器肯定报错。只能这样了,而且可以躲过编译器的警告,否则即便是子类转父类还有警告,这样就没警告了
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
if (me instanceof type) {
type new_name = (type) me;
}
me是泛型的变量,type是你要转换的类型
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
LIst<B> listB = new ArrayList<B>()
遍历List<A> 然后把集合中的每个A强转成B,然后在把B放到listB中
遍历List<A> 然后把集合中的每个A强转成B,然后在把B放到listB中
追问
...
目前我就是遍历后强转..
想知道有没有其他的办法..
追答
这个还真的没想到
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询