我第一次接觸到元組是在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 定義的而且只有構造方法,所以它只能在創建它的時候賦值,而不能在別的給其賦值,所以不用擔心它不夠安全。
