java自定义泛型方法

按照惯例(也不知道哪来的惯例),先上代码:

package com.tongdatech.winterspring.cwgx.utils;

import java.util.ArrayList;
import java.util.List;

import com.ld.ClassA;
/**
 * 
 * @author ld
 * 数据转成tree供页面展示
 * 
 */
public class TreeTableSunYi {

	public static <E extends ClassA> List<E> toTreeData(List<E> lists, int pId) {
		List<E> tVos = new ArrayList<>();
		for(E tVo : lists) {
			int parentId = tVo.getParentRowNumber();
			int id = tVo.getRowNumber();
			if(pId == parentId) {
				List<E> lossPosts = toTreeData(lists, id);
				if(lossPosts.size() > 0) {
					tVo.setChildren(lossPosts);
				}
				tVos.add(tVo);
			}
		}
		return tVos;
	}
	
}

如上,是一个递归,把数据转成tree的方法。

在代码中,我们在写方法的时候,通过“<E extends ClassA>”定义泛型类E,当然这个E可以写成其它任何字母。

但是一般情况下,Java泛型中的标记符含义是这样的:E - Element (在集合中使用,因为集合中存放的是元素),T - Type(Java 类),K - Key(键),V - Value(值),N - Number(数值类型),? -  表示不确定的java类型。

现在我们来看看“<E extends ClassA>”的含义。在方法装饰符public后直接定义E为泛型,且继承ClassA。也就是说E只能为ClassA的子类了,比如代码里的List<E>,参数里的List<E> lists,都只能是ClassA的子类。我试过传别的类型的参数,结果当然是报错,语句直接报错的那种。

在写这个泛型方法的过程中,我写了一个错误的方法,想用?号定义这个泛型方法。按照我的想法,我定义了一个只能是ClassA的子类的不确定的类,不正好符合我传不同类型当参数进这个方法的逻辑?事实证明,行不通,是我太菜了。

下面代码会报格式错误,如果有小哥哥小姐姐看出来这是什么问题了,望指教。

	private List<? extends ClassA> toTreeData(List<? extends ClassA> lists, int pId) {
		List<? extends ClassA> tVos = new ArrayList<>();
		for(<? extends ClassA> tVo : lists) {
			int parentId = tVo.getParentRowNumber();
			int id = tVo.getRowNumber();
			if(pId == parentId) {
				List<? extends ClassA> lossPosts = toTreeData(lists, id);
				if(lossPosts.size() > 0) {
					tVo.setChildren(lossPosts);
				}
				tVos.add(tVo);
			}
		}
		return tVos;
	}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值