泛型使用一例子

/**
 *
 */
package test;

import java.lang.reflect.Array;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @author JianJiang
 *
 */
public class ListUtils {
    
    private static class MyPrivateClass<T extends Map>{
        private T name;
        private int id;
        public MyPrivateClass(T name, int id) {
            this.name = name;
            this.id = id;
        }
        /**
         * @return the name
         */
        public T getName() {
            return name;
        }
        /**
         * @param name the name to set
         */
        public void setName(T name) {
            this.name = name;
        }
        /**
         * @return the id
         */
        public int getId() {
            return id;
        }
        /**
         * @param id the id to set
         */
        public void setId(int id) {
            this.id = id;
        }
        
        
    }
    
    /**
     * @param t
     * @return
     * @throws IllegalAccessException
     * @throws IllegalArgumentException
     */
    public static <T extends Map> T[] toConvert(List<MyPrivateClass<T>> t,Class obj) throws IllegalArgumentException, IllegalAccessException{
        
        Object newInstance = Array.newInstance(obj, t.size());
        
        for (int i = 0; i < t.size(); i++) {
            MyPrivateClass<T> myPrivateClass = t.get(i);
            Field[] fields = myPrivateClass.getClass().getDeclaredFields();
            for (int j = 0; j < fields.length; j++) {
                Field test = fields[j];
                test.setAccessible(true);
                Class<?> declaringClass = test.getType();
                if(declaringClass==obj){
                    Object object = test.get(myPrivateClass);
                    Array.set(newInstance, i, object);
                }
            }
        }
        
        return (T[]) newInstance;
    }
    
    public static void main(String[] args) throws IllegalArgumentException, IllegalAccessException {
        
        MyPrivateClass<Map> myprivates1 = new MyPrivateClass<Map>(new HashMap(){
            {
                put("mjj1", "mjj1");
            }
        }, 1);
        
        MyPrivateClass<Map> myprivates2 = new MyPrivateClass<Map>(new HashMap(){
            {
                put("mjj2", "mjj2");
            }
        }, 2);
        
        MyPrivateClass<Map> myprivates3 = new MyPrivateClass<Map>(new HashMap(){
            {
                put("mjj3", "mjj3");
            }
        }, 2);
        
        MyPrivateClass<Map> myprivates4 = new MyPrivateClass<Map>(new HashMap(){
            {
                put("mjj4", "mjj4");
            }
        }, 2);
        
        MyPrivateClass<Map> myprivates5 = new MyPrivateClass<Map>(new HashMap(){
            {
                put("mjj5", "mjj5");
            }
        }, 2);
        
        List<MyPrivateClass<Map>> lists = new ArrayList<ListUtils.MyPrivateClass<Map>>();
        
        lists.add(myprivates1);
        
        lists.add(myprivates2);
        
        lists.add(myprivates3);
        
        lists.add(myprivates4);
        
        lists.add(myprivates5);
        
        Map[] convert = toConvert(lists, Map.class);
        
        System.out.println(Arrays.toString(convert));
        
    }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是一个接口中使用泛型例子。假设我们有一个接口 `DataRepository`,它表示一个数据仓库,提供了一些基本的数据操作方法,例如添加数据、删除数据、修改数据、查询数据等。由于数据类型可能各不相同,因此我们可以使用泛型来定义数据类型。例如: ```java public interface DataRepository<T> { void add(T data); void remove(T data); void update(T data); T findById(int id); } ``` 在上面的示例中,我们使用泛型 `T` 来表示数据类型。在接口中定义了一些基本的数据操作方法,例如 `add()`、`remove()`、`update()`、`findById()` 等方法。这些方法可以接收任意类型的数据,根据需要进行转换和操作。 例如,如果我们要实现一个 `UserRepository` 接口,表示一个用户数据仓库,可以使用 `DataRepository` 接口并指定数据类型为 `User`,例如: ```java public interface UserRepository extends DataRepository<User> { } ``` 在上面的示例中,我们定义了一个 `UserRepository` 接口,它继承自 `DataRepository<User>` 接口,并指定数据类型为 `User`。因此,`UserRepository` 接口继承了 `DataRepository` 接口中定义的一些基本的数据操作方法,并使用 `User` 类型作为数据类型。这样,我们就可以使用 `UserRepository` 接口来操作用户数据仓库了。 总之,使用泛型可以使接口更加通用和灵活,可以适应不同类型的数据,并提供了更加方便的操作方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值