我第一次接触到元组是在java编程思想这本书中,当时我正为方法的多个返回值苦恼。因为我之前处理多个返回值方法的时候,要不建一个新的实体类,要不在接收的方法中建立一个对象,返回值之前给其赋值,要不通过异常机制向上抛出,不管哪一种都很繁琐。但是元组不一样,我们只要建立好元组类 和工具类就可以在任何地方使用,而且简单,明了。
/***
* 功能描述:登录 * @author 程三发 2016-5-26 下午03:21:30 * @param loginName 用户名 * @param appType 用户类型 1学生 其他 老师 * @param loginPass 登录密码 * @return */ public TwoTuple<Integer,TUser> SignIn(String loginName,Integer appType,String loginPass) { if(EmptyUtils.isEmpty(loginName)||EmptyUtils.isEmpty(appType)) return TupleUtil.tuple(0,null);//参数错误 TUser user=get(TUser.class,"loginName",loginName); if(appType==1){ if(user.getUserType()!=1) return TupleUtil.tuple(-1,null); }else{ if(user.getUserType()==1) return TupleUtil.tuple(-1,null); } if(EmptyUtils.isEmpty(user)) return TupleUtil.tuple(-1,null);//用户名不存在 if(!user.getLoginPass().equals(loginPass)) return TupleUtil.tuple(-2,null);//密码错误 return TupleUtil.tuple(1,user); }
/***
* 功能描述:登录 * @author 程三发 2016-5-4 上午11:43:38 * @param loginName * @param loginPass * @return */ public AppCommonModel SignIn(String loginName,String loginPass,Integer appType){ TwoTuple<Integer,TUser> twoTule= userService.SignIn(loginName,appType,loginPass); String msg=""; switch (twoTule.first) { case 0: msg="参数不能为空"; break; case -2: msg="密码错误"; break; case -1: msg="用户名不存在"; break;default:
return new AppCommonModel(twoTule.first,"登录成功",twoTule.second); } return new AppCommonModel(AppCommonModel.ERROR,msg,"{}"); }这是我用元组写的一个登陆接口,思路很简单,但是却要返回两个参数,使用元组后处理变得简单很多。
定义元组
public class TwoTuple<A, B> {
public final A first;
public final B second;public TwoTuple(A a, B b) {
this.first = a; this.second = b; }}
元组工具类
public class TupleUtil {
/*** * 功能描述:二维元组 * @author 程三发 2016-5-24 上午09:35:38 * @param <A> * @param <B> * @param a * @param b * @return */ public static <A, B> TwoTuple<A, B> tuple(A a, B b) { return new TwoTuple <A, B>(a, b); }}
无论定义元组还是元组工具类都很简洁,而且使用它也非常简单。
这里我要说明一下元组用public final 定义的而且只有构造方法,所以它只能在创建它的时候赋值,而不能在别的给其赋值,所以不用担心它不够安全。