<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      java~類型的逆變和協變

      在 Java 中,泛型的逆變(contravariance)和協變(covariance)是涉及到泛型類型轉換時的兩個重要概念。

      協變(Covariance)

      協變指的是子類型對象可以賦值給父類型引用的情況。在泛型中,協變表示如果 BA 的子類,那么 List<B> 就是 List<A> 的子類。這意味著你可以將 List<B> 賦值給 List<A>,但只能讀取 List<A> 中的元素,不能向其中添加任何元素。

      示例代碼:

      List<? extends Number> numbers = new ArrayList<Integer>();
      

      逆變(Contravariance)

      逆變指的是父類型對象可以賦值給子類型引用的情況。在泛型中,逆變表示如果 BA 的子類,那么 Consumer<A> 就是 Consumer<B> 的子類。這意味著你可以將 Consumer<A> 賦值給 Consumer<B>,并且可以向其中添加 B 類型的元素,但不能讀取其中的元素。

      示例代碼:

      Consumer<? super Integer> consumer = System.out::println;
      

      mybatis-plus中的協變

       // 子類轉成父類
        QueryWrapper<ReportLoginTypeHour> queryWrapper = new QueryWrapper<>();
        queryWrapper.lambda()
            .ge(ReportLoginType::getWindowStart, startDate.atZone(ZoneOffset.systemDefault()).toInstant().toEpochMilli())
            .lt(ReportLoginType::getWindowStart, endDate.atZone(ZoneOffset.systemDefault()).toInstant().toEpochMilli());
      
          QueryWrapper<ReportLoginType> queryWrapperMinute = new QueryWrapper<>();
          queryWrapperMinute.setEntity(queryWrapper.getEntity()); // 拷貝查詢條件
      
       // 子類轉成父類
      List<ReportLoginType> list;
      list = reportLoginTypeHourMapper.selectList(queryWrapper)
            .stream()
            .map(reportLoginTypeHour -> (ReportLoginType) reportLoginTypeHour)
            .collect(Collectors.toList());
      

      不同的Token在校驗時用到了逆變

      Token和它的子類之間的關系

      • Token
        • Md5Token
        • IdToken
          • JwtToken

      代碼的實現,每種類型在校驗失敗后會有自己的消息提示

          @Test
      	public void testSuper() {
      		JwtToken jwtToken = new JwtToken();
      		jwtToken.setUserId("1");
      		jwtToken.setRoles("admin");
      		jwtToken.setJti("123");
      		jwtToken.verify(i -> i.getUserId().equals("1"), i -> i.getRoles().equals("admin"), i -> i.getJti() != null);
      
      		Md5Token md5Token = new Md5Token();
      		md5Token.setJti("abc123");
      		md5Token.verify(i -> i.getJti().equals("abc123"));
      	}
      
      	abstract class Token {
      
      		private String jti;
      
      		public String getJti() {
      			return jti;
      		}
      
      		public void setJti(String jti) {
      			this.jti = jti;
      		}
      
      	}
      
      	class IdToken extends Token {
      
      		private String userId;
      
      		public String getUserId() {
      			return userId;
      		}
      
      		public void setUserId(String userId) {
      			this.userId = userId;
      		}
      
      	}
      
      	class JwtToken extends IdToken {
      
      		private String roles;
      
      		public String getRoles() {
      			return roles;
      		}
      
      		public void setRoles(String roles) {
      			this.roles = roles;
      		}
      
      		/**
      		 * JwtToken類校驗方法 通配符的下限,校驗實體字段的方法,通過傳入實體的Predicate條件,來對當前實體進行校驗
      		 * @return
      		 */
      		public void verify(Predicate<? super JwtToken>... checks) {
      			for (Predicate<? super JwtToken> check : checks) {
      				if (!check.test(this)) {
      					throw new IllegalArgumentException("JWT token check failed for check " + check);
      				}
      			}
      		}
      
      	}
      
      	class Md5Token extends Token {
      
      		public void verify(Predicate<? super Md5Token>... checks) {
      			for (Predicate<? super Md5Token> check : checks) {
      				if (!check.test(this)) {
      					throw new IllegalArgumentException("Md5 token check failed for check " + check);
      				}
      			}
      		}
      
      	}
      
      posted @ 2024-01-11 14:55  張占嶺  閱讀(189)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 亚洲无线观看国产精品| 久久天天躁夜夜躁狠狠综合 | 99riav国产精品视频| 人妻另类 专区 欧美 制服| 亚洲高潮喷水无码AV电影| 亚洲一区二区三区日本久久| 亚洲精品天天影视综合网| 人妻少妇偷人无码视频| 一区二区三区日本久久九| 99热精品毛片全部国产无缓冲| 一色屋精品视频在线观看| 黄色亚洲一区二区在线观看| 国产suv精品一区二区五| 欧美怡春院一区二区三区| 精品人妻二区中文字幕| 久久人妻国产精品| 国产成人免费| 久久er99热精品一区二区| 国产成人无码免费看片软件| 双乳奶水饱满少妇呻吟免费看| 国精一二二产品无人区免费应用| 色宅男看片午夜大片啪啪| 国产极品精品自在线不卡| 内射视频福利在线观看| 国偷自产视频一区二区久| 亚洲一区二区三区激情视频| 国产国拍亚洲精品永久软件| 亚洲av成人一区在线| 欧美高清一区三区在线专区| 好吊视频在线一区二区三区| 国产精品激情av在线播放| 欧美极品色午夜在线视频| 四虎成人精品在永久在线| 国产av亚洲精品ai换脸电影| 成在人线av无码免费看网站直播 | 日韩精品视频一二三四区| 狠狠躁夜夜躁人人爽蜜桃| 国产高清精品一区二区三区| 广平县| 最新av中文字幕无码专区| 亚洲综合久久一区二区三区|