网上搜索关于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编程语言中的一个关键特性,它在2004年随着JDK 5.0的发布被引入,极大地增强了代码的类型安全性和重用性。本篇文章将带你入门Java泛型,通过实例深入理解其核心概念。 1. **泛型的基本概念** - 泛型...
Java泛型是Java编程语言中的一个关键特性,它在2004年随着Java SE 5.0的发布而引入,极大地增强了代码的类型安全性和重用性。泛型允许我们在编写类、接口和方法时指定参数化类型,使得代码在编译时就能进行类型检查...
这是一个使用JAVA实现的泛型编程,分为两部分,第一部分创建泛型类,并实例化泛型对象,得出相加结果。 第二部分用户自行输入0--4,选择要进行的加减乘除运算或退出,再输入要进行运算的两个数,并返回运算结果及...
然而,在 Java 中使用泛型时,会出现一个问题:如何实例化泛型对象?在 Java 中,泛型擦除机制使得编译器无法确定泛型所对应的真实类型,因此无法直接实例化泛型对象。下面将详细介绍 Java 让泛型实例化的方法。 ...
下面的例子展示了一个返回两个参数最大值的泛型方法: ```csharp public static T MaxValue(T a, T b) where T : IComparable { if (a.CompareTo(b) > 0) return a; else return b; } ``` 泛型接口则定义了...
简单工厂模式通过一个静态方法返回一个具体类型的实例。这种方法的优点是简洁,可以直接使用泛型方法。但是,它的局限性在于只能通过默认构造器创建对象,如果目标类没有默认构造器,就会导致异常。此外,这种模式...
Java泛型机制详解 Java泛型是Java语言中的一种机制,用于在编译期检查类型安全。Java泛型的出现解决了Java早期版本中类型安全检查的缺陷。Java泛型的好处是可以在编译期检查类型安全,避免了运行时的...
下面是一个示例代码: ``` abstract public class BaseHibernateEntityDao<T> extends HibernateDaoSupport { private Class<T> entityClass; public BaseHibernateEntityDao() { entityClass =(Class) (...
JAVA泛型源代码实现以下功能:返回数组元素的最大值/最小值下标;判断数组元素是否按升序排列;T对象数组排序;二分法查找key元素;
Java泛型是Java编程语言中的一个关键特性,它在2004年随着JDK 5.0的发布被引入,极大地增强了类型安全性和代码可读性。泛型允许我们在类、接口和方法中定义参数化的类型,使得我们能够在编译时检查类型,避免了类型...
这里,List<? super Fruit> 表示“具有任何 Fruit 超类型的列表”,列表的类型至少是一个 Fruit 类型,因此可以安全地向其中添加 Fruit 及其子类型。 通配符类型 Java 泛型中还有一种特殊的类型:通配符类型。...
在Java编程语言中,泛型(Generics)是一种强大的特性,它允许我们在编写代码时...同时,`Java.jpg`可能是对这个概念的一个图形化解释或者示例的截图。通过学习和理解这些示例,你可以更好地掌握Java泛型类的类型识别。
在这个例子中,`GenericInterface`是一个泛型接口,`T`是它的类型参数,`operate()`方法接受一个类型为`T`的参数。 2. **类型参数的约束** 我们还可以对类型参数进行约束,限制它可以是哪些类型的子类。例如,...
* 一个参数通配符的实例 * 说明:对一个包含了数值元素的集合进行汇总运算。在这种情况下,用户并不关心 * 集合中的每一个对象是什么类型,只要它是数值型即可,而且,用户也希望集合中可以 * 存放不同类型的数值...
Java泛型是Java编程语言中的一个关键特性,它在2004年随着Java SE 5.0的发布而引入,极大地增强了代码的类型安全性和重用性。本篇文章将深入探讨Java泛型的发展历程、核心概念以及其在实际开发中的应用。 1. **发展...