当前位置: 首页 > 知识库问答 >
问题:

泛型-从类中获取值

暴乐邦
2023-03-14

我有一个类,它将我的jpa实体转换为到,反之亦然。

当我在ConvertenTityListIntoList方法中进行转换时,返回的ListList ,我需要它是List

是否可以迭代此集合(list > )并获取“to”值?

转炉

    public class MyConverter<E, T> implements Serializable {

        private Class<E> myEntity;
        private Class<T> myTO;

        public MyConverter(Class<E> myEntity, Class<T> myTO) {
            this.myEntity = myEntity;
            this.myTO = myTO;
        }

        public List<T> convertEntityListInTOList(List<E> entityList) {
            List<T> listTO = new ArrayList<T>();
            for(E obj : entityList) {
                myTO = convertEntityInTO(obj);
                listTO.add(myTO);
            }               
            return listTO;
        }

        public List<E> convertTOListInEntityList(List<T> listTOs) {
            List<E> entityList = new ArrayList<E>();
            for(T to : listTOs) {
                myEntity = convertTOInEntity(to);
                entityList.add(myEntity);
            }           
            return entityList;
        }

        public T convertEntityInTO(Object myEntity) {
            T myTO = createInstanceTO();
            if(myEntity != null) {
                try {
                    BeanUtils.copyProperties(myTO, myEntity);
                } catch (IllegalAccessException e) {
                    e.printStackTrace();
                } catch (InvocationTargetException e) {
                    e.printStackTrace();
                }
            }
            return myTO;
        }

        public E convertTOInEntity(T myTO) {
            E myEntity = createInstanceEntity();
            if(myTO != null) {
                try {
                    BeanUtils.copyProperties(myEntity, myTO);
                } catch (IllegalAccessException e) {
                    e.printStackTrace();
                } catch (InvocationTargetException e) {
                    e.printStackTrace();
                }
            }    
            return myEntity;    
        }

/**
     * 
     * @return
     */
    public T createInstanceTO() {
        try {
            return getMyTO().newInstance();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 
     * @return
     */
    public E createInstanceEntity() {
        try {
            return getMyEntity().newInstance();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
        return null;
    }

}

转炉生产者

@Produces
public MyConverter create(InjectionPoint ip) {
    ParameterizedType type = (ParameterizedType) ip.getType();
    Class myEntity = (Class) type.getActualTypeArguments()[0];
    Class myTO = (Class) type.getActualTypeArguments()[1];
    return new MyConverter(myEntity, myTO);
}

共有1个答案

子车才捷
2023-03-14

null

所以,当你写的时候

Class myEntity = (Class) type.getActualTypeArguments()[0];
    Class myTO = (Class) type.getActualTypeArguments()[1];
    return new MyConverter(myEntity, myTO);

您试图创建一个将转换为另一个的转换器,这是没有意义的。这就是为什么convertentitylistintolist的返回类型是一个类列表的原因。

创建一个包含每个实体的一个实例的转换器也不会产生sens。您应该每次创建一个新实例,或者填充一个实例,作为convert方法的参数。

 类似资料:
  • 如何获取这个类的类型?对于上下文,我使用ModelMapper,我需要类类型T从S转换为T。 背景: 我已经尝试了N种方法,其中我放置了“//一些方法来获取类型”,但没有任何效果。例如: 或

  • 问题内容: 我正在尝试重构M类型确实扩展了任何内容的类和子类集,即使我们知道它必须是某种类型的子类也是如此。该类型已参数化,我希望其参数化类型可用于已经具有M值的子类。 有什么方法可以定义此类,而不必在参数列表中包括冗余的K和V泛型类型。我希望能够使编译器从子类映射到的M中推断出它们。 换句话说,我希望类声明看起来像这样: 从M的定义可以推断出K和V的类型。 问题答案: 问题在于,它们并没有真正地

  • 问题内容: 我有一个列表,程序是这样的:。有什么方法可以使用T变量获取类的名称(因此我可以从内部知道T是否为String,Socket等)? 编辑:没关系,在这里找到了答案。 问题答案: 简短答案 :您不能。 长答案 : 由于使用Java实现泛型的方式,泛型T在运行时不会保留。您仍然可以使用私有数据成员: 用法示例:

  • 问题内容: 我在使用泛型时遇到麻烦。给出以下示例: 什么 ???应该 ? 不工作… 也不。 不工作… 如果有Java泛型专家,我需要帮助…:/ 问题答案: 由于类型擦除,您可能无法获得除外。你将不得不使用不安全的类型转换投下的-具体而言,将做的工作。

  • 问题内容: 通常,我见过人们像这样使用类文字: 但是,如果类型是通用类型,例如List,该怎么办?这可以正常工作,但由于应将List参数化,因此发出警告: 那么为什么不添加一个<?>呢?好吧,这会导致类型不匹配错误: 我想像这样的事情会起作用,但这只是一个普通的语法错误: 如何获得Class >静态信息,例如使用类文字? 我可以使用,以摆脱在第一个例子中所造成的非参数使用列表,警告的,但我宁愿不要

  • 目前,我使用这个解决方案,使用,而不是: