java泛型dao学习笔记(java dao类)

发布时间:2022-11-15

本文目录一览:

  1. 如何正确理解java中的泛型类型推导
  2. 如何理解Java的泛型
  3. java 方法中如何在返回类型使用泛型
  4. java 泛型的几种用法
  5. java中Dao中用泛型

如何正确理解java中的泛型类型推导

具体类型应该是开发者编写程序调用的时候自己指定的类型,Java的泛型是一种编译时泛型,按目前的理解Java泛型只是提供了一种编译时的类型安全检查,而编译后实际运行时是没有某种被定义的"泛型"类型的(类型擦除)。 其实对于初学者对这一点可以将Java泛型简单理解为一种将因类型错误而引发的异常提前到编码阶段。当开发者在错误的调用泛型类和方法时IDE就会提示错误,而不用等到程序真正运行时再报错。

如何理解Java的泛型

泛型(Generic type 或者 generics)是对简单的理解,就是对类型的参数化,比如我们定义一个类属性或者实例属性时,往往要指定具体的类型,如Integer、Person等等,但是如果使用了泛型,我们把这些具体的类型参数化,用一个广泛的可以表示所有类型的“类型”T来定义,那这个T就是泛型的表示。 可以在集合框架(Collection framework)中看到泛型的动机。例如,Map 类允许您向一个 Map 添加任意类的对象,即使最常见的情况是在给定映射(map)中保存某个特定类型(比如 String)的对象。 因为 Map.get() 被定义为返回 Object,所以一般必须将 Map.get() 的结果强制类型转换为期望的类型,如下面的代码所示:

Map m = new HashMap();
m.put("key", "value");
String s = (String) m.get("key");

要让程序通过编译,必须将 get() 的结果强制类型转换为 String,并且希望结果真的是一个 String。如果map中保存了的不是 String 的数据,则上面的代码将会抛出 ClassCastException。

java 方法中如何在返回类型使用泛型

主要是一个编译期的检查,也避免了我们代码中的强制转换,比较经典的用法有泛型DAO,泛型Page的DTO。 现在我要说的是一个挺有趣但是貌似还不是太多的人在代码中使用的方法,前段时间用guava和op4j的时候发现这样的用法,看看了源码,也是很简单的。 比如guava中创建集合的方法 Listxx list = Lists.newArrayList(),这个代替了我们传统的 new ArrayListxx,为什么在=的右边不需要泛型了呢,我们看看源码。

public static <E> ArrayList<E> newArrayList() {
    return new ArrayList<E>();
}

返回类型中带有泛型E,并且这个泛型的来源在 static和 ArrayList之间的位置,我自己的理解是这个就和=左边的一致,可能说的不够专业但是意思应该就这样。 于是我就依样画葫芦在自己的代码中也用了起来。 我要做的是一个仿httpsession机制的自定义协议是session。在httpsession.getAttribute方法返回的是一个Object,然后我们再类型转换。现在我用返回类型泛型来优化这个代码,以下是我自定义协议session的getAttribute的代码。

@SuppressWarnings("unchecked")
public <E> E getAttribute(String key) {
    return (E) map.get(key);
}

调用代码:

Boolean isFirst = session.getAttribute("first");

在httpsession中我们则要这么写:

Boolean isFirst = (Boolean)session.getAttribute("first");

泛型的用法还有很多,有新的心得再补充更新。

java 泛型的几种用法

public class DAO<T> {
    /**
     * 泛型类
     * 声明类的同时声明泛型类型
     * 1.方法的返回值可以是使用声明的泛型类型
     * 2.方法的参数也可以是声明类的泛型类型
     * 3.方法体内可以使用泛型类型
     */
    public T get(Integer id){
        return null;
    }
    public void save(T entity){
    }
}
/**
 * 泛型方法: 在方法声明时, 同时声明泛型. 在方法的返回值, 参数列表以及方法体中都可以使用泛型类型.
 * public static <T> T get(Integer id){
 *     T result = null;
 *     return result;
 * }
 * 把指定类型的数组中的元素放入到指定类型的集合中
 */

java中Dao中用泛型

贴上你IA类的代码,泛型在java里面是一种语法糖,作用简单可以理解为让开发在编译阶段能发现相关的错误 而不是让错误在运行阶段才被发现 如 List<String> 则list里面只能放入String类型,否则编译都通不过,你可以搜搜语法糖的作用,实际泛型在形成的class文件中还是会被擦除。