栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java: 非泛型类如何设计List这样的属性

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java: 非泛型类如何设计List这样的属性

Java中, 经常会碰到这样一个设计, 一个类需要外部传入一个List 泛型List属性, 这样就可以在不同使用场景中传入不同的List, 可能会传入 List, 也可以会传入 List.

 虽然Circle 类是Shape类的子类, 但 List 却不是 List 的子类, 所以普通类是不能直接真支持List属性的, 下面是一个变通的方法, 另一个是将这个普通类改造成泛型类.

下面是普通类支持List属性的方法, 核心做法是:

1. setter 采用 Object[] 传入数据;

2. 在返回List的方法中, 需要传入一个T[].class 类型参数, 这样能直接返回List data.

⒊ 为了能让这个普通类知道List每个元素的具体类型, 再增加一个 setter

package test;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class Test {

    public static void main(String[] args) throws IOException {
        //准备List 数据
        List myList=new ArrayList();
        myList.add("abc");
        
        ListTProcessor processor=new ListTProcessor();
        //将List转成数组形式, set到ListTProcessor目标对象中 
        processor.setMyListData(myList.toArray());
        processor.setMyItemClazz(String.class);
        
        //从ListTProcessor获取原来的List, 需要传入 Circle[].class 
        List myList2=processor.getMyList(String[].class);
        System.out.println(myList2.get(0)); 
        System.in.read();
    }

}


class ListTProcessor {
    private Object[] myListData;
    private Class myItemClazz ;

    public Class getMyItemClazz() {
        return myItemClazz;
    }

    
    public void setMyItemClazz(Class myItemClazz) {
        this.myItemClazz = myItemClazz;
    }

    public Object[] getMyListData() {
        return myListData;
    }

    
    public void setMyListData(Object[] myListData) {
        this.myListData = myListData;
    }

    
    
    public  List getMyList(Class clazz) {
        //将object[] 转成 T[] 数组
        T[] array1 = Arrays.copyOf(myListData, myListData.length, clazz);
        List lst = Arrays.asList(array1);
        return lst;
    }
    
 
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/323109.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号