java类型转换

A1239521567A 2014-05-21 06:30:32
如何将一个list<object> 强制转换为一个list<指定类型> 指定类型根据场景不同会发生变化,也就是说指定类型是不确定的。写成方法
...全文
387 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
vnvlyp 2014-05-25
  • 打赏
  • 举报
回复
引用 13 楼 u014706251 的回复:
[quote=引用 1 楼 vnvlyp 的回复:] 下面这样吗?如果你在编译时就知道应该转为什么类型
	public static void main(String[] args) {
		List<Object> ori = new ArrayList<>();
		ori.add(20);
		ori.add(2);
		ori.add(10);
		
		List<Integer> list = new ArrayList<>();
		convert(ori, list);
		
		for (Integer i : list) {
			System.out.println(i);
		}
	}
	
	@SuppressWarnings("unchecked")
	public static <T> void convert(List<Object> ori, List<T> list) {
		for (Object o : ori) {
			list.add((T)o);
		}
	}
java中有convert吗?[/quote] convert函数是我自己写的
听!起风了~~~ 2014-05-25
  • 打赏
  • 举报
回复
引用 1 楼 vnvlyp 的回复:
下面这样吗?如果你在编译时就知道应该转为什么类型
	public static void main(String[] args) {
		List<Object> ori = new ArrayList<>();
		ori.add(20);
		ori.add(2);
		ori.add(10);
		
		List<Integer> list = new ArrayList<>();
		convert(ori, list);
		
		for (Integer i : list) {
			System.out.println(i);
		}
	}
	
	@SuppressWarnings("unchecked")
	public static <T> void convert(List<Object> ori, List<T> list) {
		for (Object o : ori) {
			list.add((T)o);
		}
	}
java中有convert吗?
yuhero_bbs 2014-05-24
  • 打赏
  • 举报
回复
引用 11 楼 yuhero_bbs 的回复:
import java.util.ArrayList;
import java.util.List;


public class Cast {
	public static void main(String[] args){
		/*如何将一个List<object> 强制转换为一个List<指定类型>        
		 * 指定类型根据场景不同会发生变化,也就是说指定类型是不确定的。*/
		List<Object> list=new ArrayList<Object>();
		List<Number> list1=new ArrayList<Number>();
		/**把对象list的全部元素由Object转换成指定类型T*/
		castlist(list,list1);
               System.out.println(list1);
	}

	private static <T extends Object> void castlist(List<Object> list,List<T> list1) {
		for(int i=0;i<list.size();i++){
			list1.add((T)(list.get(i)));
		}
		
	}
	

}
这段代码已满足要求,指定类型不确定所以必须新建一个目的集合来满足。 private static <T extends Object> void castlist(List<Object> list,List<T> list1) 函数头中, <T extends Object> 是要求参数列表中对象继承Object.
yuhero_bbs 2014-05-24
  • 打赏
  • 举报
回复
import java.util.ArrayList;
import java.util.List;


public class Cast {
	public static void main(String[] args){
		/*如何将一个List<object> 强制转换为一个List<指定类型>        
		 * 指定类型根据场景不同会发生变化,也就是说指定类型是不确定的。*/
		List<Object> list=new ArrayList<Object>();
		List<Number> list1=new ArrayList<Number>();
		/**把对象list的全部元素由Object转换成指定类型T*/
		castlist(list,list1);
               System.out.println(list1);
	}

	private static <T extends Object> void castlist(List<Object> list,List<T> list1) {
		for(int i=0;i<list.size();i++){
			list1.add((T)(list.get(i)));
		}
		
	}
	

}
scott_129 2014-05-24
  • 打赏
  • 举报
回复
你需要的是做成一个方法,那就传入一个源list,一个目的list,遍历源list将里面的对象转成需要的对象类型,然后存在目的list中间就可以了。然后返回目的list
Magical茏 2014-05-23
  • 打赏
  • 举报
回复
7楼点赞
曼珠沙华糯米 2014-05-23
  • 打赏
  • 举报
回复
顶楼上
于金龙 2014-05-23
  • 打赏
  • 举报
回复
用关键字instanceof,判断出其类型,然后再强制转换。 下面是我的示例代码:


	public static void main(String[] args) {
		//构造list,里面存了各种类型的数据
		List<Object> list=new ArrayList();
		list.add("abc");
		list.add('d');
		list.add(90);
		list.add(new Person("张三",30));
		//创建输出
		StringBuffer buffer=new StringBuffer();
		for(int index=0;index<list.size();index++){
			Object obj=list.get(index);	
			buffer.append(index).append("\t");
			if(obj instanceof String){
				buffer.append("type=String").append("\t");
				String str=(String) obj;
				buffer.append("value=").append(str);
			}else if(obj instanceof Character){
				buffer.append("type=char").append("\t");
				char ch=(Character) obj;
				buffer.append("value=").append(ch);
			}else if(obj instanceof Integer){
				buffer.append("type=int").append("\t");
				int i=(Integer) obj;
				buffer.append("value=").append(i);
			}else if(obj instanceof Person){
				buffer.append("type=class,className=Person").append("\t");
				Person person=(Person) obj;
				buffer.append("value=").append(person);
			}
			buffer.append("\n");
		}
		System.out.println(buffer.toString());
	}
	static class Person{
		String name;
		int age;
		Person(String name,int age){
			this.name=name;
			this.age=age;
		}
		@Override
		public String toString() {
			return "Person [age=" + age + ", name=" + name + "]";
		}
		
	}

于金龙 2014-05-23
  • 打赏
  • 举报
回复
用关键字instanceof,判断出其类型,然后再强制转换。 下面是我的示例代码: public static void main(String[] args) { //构造list,里面存了各种类型的数据 List<Object> list=new ArrayList(); list.add("abc"); list.add('d'); list.add(90); list.add(new Person("张三",30)); //创建输出 StringBuffer buffer=new StringBuffer(); for(int index=0;index<list.size();index++){ Object obj=list.get(index); buffer.append(index).append("\t"); if(obj instanceof String){ buffer.append("type=String").append("\t"); String str=(String) obj; buffer.append("value=").append(str); }else if(obj instanceof Character){ buffer.append("type=char").append("\t"); char ch=(Character) obj; buffer.append("value=").append(ch); }else if(obj instanceof Integer){ buffer.append("type=int").append("\t"); int i=(Integer) obj; buffer.append("value=").append(i); }else if(obj instanceof Person){ buffer.append("type=class,className=Person").append("\t"); Person person=(Person) obj; buffer.append("value=").append(person); } buffer.append("\n"); } System.out.println(buffer.toString()); } static class Person{ String name; int age; Person(String name,int age){ this.name=name; this.age=age; } @Override public String toString() { return "Person [age=" + age + ", name=" + name + "]"; } }
A1239521567A 2014-05-22
  • 打赏
  • 举报
回复
引用 1 楼 vnvlyp 的回复:
下面这样吗?如果你在编译时就知道应该转为什么类型
	public static void main(String[] args) {
		List<Object> ori = new ArrayList<>();
		ori.add(20);
		ori.add(2);
		ori.add(10);
		
		List<Integer> list = new ArrayList<>();
		convert(ori, list);
		
		for (Integer i : list) {
			System.out.println(i);
		}
	}
	
	@SuppressWarnings("unchecked")
	public static <T> void convert(List<Object> ori, List<T> list) {
		for (Object o : ori) {
			list.add((T)o);
		}
	}
关键是你这样写的不够严谨,你转型前没有做检查类型啊。。。。。
kszpig 2014-05-22
  • 打赏
  • 举报
回复
遍历再转 没办法直接转 的 这是泛型 的局限
kiyoki 2014-05-21
  • 打赏
  • 举报
回复
java运行期没有泛型,如果你坚信传入List的每个元素都是你所想变的类型,做个转型就好


	
	public static void main(String[] args) {
	
		List<Object> list = new ArrayList<Object>();
		list.add(1224);
		list.add(124);
		
		List<Integer>  list2 = change(list,Integer.class);
		for(Integer i:list2){
			System.out.println(i);
		}
		
	}
	
	
	/**
	 * 
	 * @param a   任意List
	 * @param clazz  目标泛型的class
	 * @return
	 */
	@SuppressWarnings("unchecked")
	public static<T> List<T> change(List<?> a,Class<T> clazz){
		return (List<T>)a;
	}





vnvlyp 2014-05-21
  • 打赏
  • 举报
回复
下面这样吗?如果你在编译时就知道应该转为什么类型
	public static void main(String[] args) {
		List<Object> ori = new ArrayList<>();
		ori.add(20);
		ori.add(2);
		ori.add(10);
		
		List<Integer> list = new ArrayList<>();
		convert(ori, list);
		
		for (Integer i : list) {
			System.out.println(i);
		}
	}
	
	@SuppressWarnings("unchecked")
	public static <T> void convert(List<Object> ori, List<T> list) {
		for (Object o : ori) {
			list.add((T)o);
		}
	}

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧