`
quakezh
  • 浏览: 19518 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

一个Java泛型方法的实例, 请各位方家指正

    博客分类:
  • Java
阅读更多
网上搜索关于java泛型方法的例子不多而且比较简单,这里我贴一个自己项目中的例子,望方家批评指正。
设有类集合List<CTrump> lst,需要一些集合过滤操作,
  比如针对CTrump.ID值的过滤;
  或CTrump.Val的某个值域的判定;
  亦或CTrump中某个属性的某种条件判断, 如CTrump.Name!=null; 等等
当然可以把这些操作都直接定义在CTrump类中,也可以抽象到一些Interface中,但使用泛型方法应该更简洁和灵活些。

public class CSetFilter
{
    /**
     * 单数值比较过滤器
     * @param src 源对象集合(待过滤对象集合)
     * @param val 指定要比较的数值
     * @param compor 比较例程(用于建立类T与数值V间的比较方式)
     * @return 过滤后输出的对象集合
     */
    public static <T, V extends Number, C extends ICompVal<T,V>> List<T> ValueFilter(List<T> src, V val, C compor)
    {
        ArrayList<T> lst = new ArrayList<T> (src.size());
        for(T t:src)
            if(compor.compare(t, val))
                lst.add(t);
        return lst;
    }
    /**
     * 条件过滤器
     * @param src 源对象集合(待过滤对象集合)
     * @param cond 条件例程(用于指定类T的某种需要测试的条件)
     * @return 过滤后输出的对象集合
     */
    public static <T, C extends ICondition<T>> List<T> ConditionFilter(List<T> src, C cond)
    {
        ArrayList<T> lst = new ArrayList<T> (src.size());
        for(T t:src)
            if(cond.condition(t))
                lst.add(t);
        return lst;
    }

    /**
     * 值域过滤器
     * @param src 源对象集合(待过滤对象集合)
     * @param vmin 指定值域下标
     * @param vmax 指定值域上标
     * @param compor 比较例程(用于建立类T与指定值域间的比较方式)
     * @return 过滤后输出的对象集合
     */
    public static <T, V extends Number, C extends IValRng<T,V>> List<T> RngFilter(List<T> src, V vmin, V vmax, C compor)
    {
        ArrayList<T> lst = new ArrayList<T> (src.size());
        for(T t:src)
            if(compor.range(t, vmin, vmax))
                lst.add(t);
        return lst;
    }
}
public interface ICompVal<T, V extends java.lang.Number>
{
    boolean compare(T t, V v);
}
public interface ICondition<T>
{
    boolean condition(T t);
}
public interface IValRng<T, V extends Number>
{
    boolean range(T t, V vmin, V vmax);
}

实例化
    
public void testValueFilter(int id,int n) {
        List<CTrump> tlst = CTrump.LoadByPID(id);
        List<CTrump> lst = CSetFilter.ValueFilter(tlst, n, new ICompVal<CTrump,Integer> () {
            public boolean compare(CTrump t, Integer n)
            {
                return t.getID()>n;
            }
        });
        for(CTrump t:lst)
            System.out.println(t.getID());
    }

如此以来,类CTrump与那些繁琐的比较例程解耦了,只有用到集合过滤时,才由那些比较接口建立起彼此的联系。这种泛型思想,原来在开发C++项目时常常用到,用Java一样可以实现。有不少人对Java的泛型颇有微词,确实,Java不能完全实现C++的泛型,但也不像一些人说的那样无用。
关于集合类的过滤器,还有什么好的实现手段?望各位方家不吝赐教。
分享到:
评论

相关推荐

    Java泛型应用实例

    Java泛型是Java编程语言中的一个强大特性,它允许我们在定义类、接口和方法时指定类型参数,从而实现代码的重用和类型安全。在Java泛型应用实例中,我们可以看到泛型如何帮助我们提高代码的灵活性和效率,减少运行时...

    java 泛型方法使用示例

    泛型方法是泛型技术在类方法层面的应用,它允许我们定义一个可以处理多种数据类型的通用方法。下面我们将深入探讨Java泛型方法的概念、语法以及使用示例。 **一、泛型方法概念** 泛型方法是一种具有类型参数的方法...

    java 泛型入门 实例

    Java泛型是Java编程语言中的一个关键特性,它在2004年随着JDK 5.0的发布被引入,极大地增强了代码的类型安全性和重用性。本篇文章将带你入门Java泛型,通过实例深入理解其核心概念。 1. **泛型的基本概念** - 泛型...

    Java泛型实例

    Java泛型是Java编程语言中的一个关键特性,它在2004年随着Java SE 5.0的发布而引入,极大地增强了代码的类型安全性和重用性。泛型允许我们在编写类、接口和方法时指定参数化类型,使得代码在编译时就能进行类型检查...

    JAVA泛型加减乘除

    这是一个使用JAVA实现的泛型编程,分为两部分,第一部分创建泛型类,并实例化泛型对象,得出相加结果。 第二部分用户自行输入0--4,选择要进行的加减乘除运算或退出,再输入要进行运算的两个数,并返回运算结果及...

    Java让泛型实例化的方法

    然而,在 Java 中使用泛型时,会出现一个问题:如何实例化泛型对象?在 Java 中,泛型擦除机制使得编译器无法确定泛型所对应的真实类型,因此无法直接实例化泛型对象。下面将详细介绍 Java 让泛型实例化的方法。 ...

    C#泛型类、泛型方法、泛型接口、泛型委托的实例

    下面的例子展示了一个返回两个参数最大值的泛型方法: ```csharp public static T MaxValue(T a, T b) where T : IComparable { if (a.CompareTo(b) &gt; 0) return a; else return b; } ``` 泛型接口则定义了...

    Java 泛型擦除后的三种补救方法

    简单工厂模式通过一个静态方法返回一个具体类型的实例。这种方法的优点是简洁,可以直接使用泛型方法。但是,它的局限性在于只能通过默认构造器创建对象,如果目标类没有默认构造器,就会导致异常。此外,这种模式...

    很好的Java泛型的总结

    Java泛型机制详解 Java泛型是Java语言中的一种机制,用于在编译期检查类型安全。Java泛型的出现解决了Java早期版本中类型安全检查的缺陷。Java泛型的好处是可以在编译期检查类型安全,避免了运行时的...

    Java泛型的用法及T.class的获取过程解析

    下面是一个示例代码: ``` abstract public class BaseHibernateEntityDao&lt;T&gt; extends HibernateDaoSupport { private Class&lt;T&gt; entityClass; public BaseHibernateEntityDao() { entityClass =(Class) (...

    JAVA泛型简单排序实例

    JAVA泛型源代码实现以下功能:返回数组元素的最大值/最小值下标;判断数组元素是否按升序排列;T对象数组排序;二分法查找key元素;

    java泛型实例讲解代码.rar

    Java泛型是Java编程语言中的一个关键特性,它在2004年随着JDK 5.0的发布被引入,极大地增强了类型安全性和代码可读性。泛型允许我们在类、接口和方法中定义参数化的类型,使得我们能够在编译时检查类型,避免了类型...

    Java泛型三篇文章,让你彻底理解泛型(super ,extend等区别)

    这里,List&lt;? super Fruit&gt; 表示“具有任何 Fruit 超类型的列表”,列表的类型至少是一个 Fruit 类型,因此可以安全地向其中添加 Fruit 及其子类型。 通配符类型 Java 泛型中还有一种特殊的类型:通配符类型。...

    java 泛型类的类型识别示例

    在Java编程语言中,泛型(Generics)是一种强大的特性,它允许我们在编写代码时...同时,`Java.jpg`可能是对这个概念的一个图形化解释或者示例的截图。通过学习和理解这些示例,你可以更好地掌握Java泛型类的类型识别。

    java 泛型接口示例

    在这个例子中,`GenericInterface`是一个泛型接口,`T`是它的类型参数,`operate()`方法接受一个类型为`T`的参数。 2. **类型参数的约束** 我们还可以对类型参数进行约束,限制它可以是哪些类型的子类。例如,...

    Java 泛型通配符的一个实例

    * 一个参数通配符的实例 * 说明:对一个包含了数值元素的集合进行汇总运算。在这种情况下,用户并不关心 * 集合中的每一个对象是什么类型,只要它是数值型即可,而且,用户也希望集合中可以 * 存放不同类型的数值...

    java泛型技术之发展

    Java泛型是Java编程语言中的一个关键特性,它在2004年随着Java SE 5.0的发布而引入,极大地增强了代码的类型安全性和重用性。本篇文章将深入探讨Java泛型的发展历程、核心概念以及其在实际开发中的应用。 1. **发展...

Global site tag (gtag.js) - Google Analytics