真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

設(shè)計(jì)配置選項(xiàng)等級(jí)系統(tǒng)-創(chuàng)新互聯(lián)

- 什么是“配置選項(xiàng)等級(jí)”呢?設(shè)計(jì)配置選項(xiàng)等級(jí)系統(tǒng)

舉個(gè)例子,PHP設(shè)置報(bào)錯(cuò)級(jí)別(來源PHP官網(wǎng)示例:https://www.php.net/manual/zh/function.error-reporting.php):

創(chuàng)新互聯(lián)專注于中大型企業(yè)的網(wǎng)站制作、成都網(wǎng)站制作和網(wǎng)站改版、網(wǎng)站營銷服務(wù),追求商業(yè)策劃與數(shù)據(jù)分析、創(chuàng)意藝術(shù)與技術(shù)開發(fā)的融合,累計(jì)客戶上千多家,服務(wù)滿意度達(dá)97%。幫助廣大客戶順利對(duì)接上互聯(lián)網(wǎng)浪潮,準(zhǔn)確優(yōu)選出符合自己需要的互聯(lián)網(wǎng)運(yùn)用,我們將一直專注品牌網(wǎng)站建設(shè)和互聯(lián)網(wǎng)程序開發(fā),在前進(jìn)的路上,與客戶一起成長(zhǎng)!
 1 

可以看到我們?cè)O(shè)置錯(cuò)誤級(jí)別非常方便,想要哪些錯(cuò)誤級(jí)別直接用 “|” 鏈接即可;

Java中網(wǎng)絡(luò)編程,使用的 java.nio.channels.SelectionKey 中設(shè)置 Interest Option 也是類似操作:

tmpKey.interestOps(tmpKey.interestOps() | SelectionKey.OP_READ);

打開 java.nio.channels.SelectionKey 源碼發(fā)現(xiàn)定義了

OP_READ = 1
  OP_WRITE = 4
  OP_CONNECT = 8

……

等類常量;

再向下翻,發(fā)現(xiàn)一段代碼:

public final boolean isReadable() {
return (this.readyOps() & 1) != 0;
    }

原來前面通過設(shè)置interestOps后,判斷channel是否可讀就是判斷:(this.readyOps() & 1) != 0;

原理也很簡(jiǎn)單,二進(jìn)制操作 | 相當(dāng)于加,即對(duì)應(yīng)的二進(jìn)制位變更為1,&操作即為 判斷是否有相同位置均為1;

例如:

1 | 2 得 3,

1二進(jìn)制 0001

2 二進(jìn)制 0010

或之后,只要對(duì)應(yīng)位置任意一位為 1, 即將該位置變更為1;

3 二進(jìn)制 0011

得到3后,判斷用戶是否設(shè)置了 常量值為1對(duì)應(yīng)的選項(xiàng),即為:

3 & 1

3 二進(jìn)制 0011

1 二進(jìn)制 0001

與之后,對(duì)應(yīng)位置均為1得1否則得0:

0001 十進(jìn)制(1), 1!= 0 成立,返回true,說明用戶設(shè)置了 常量值為1對(duì)應(yīng)的選項(xiàng)!

那么如何選擇 選項(xiàng)常量值呢?可以看到Java SelectionKey 設(shè)置的是依次是 1、4、 8 ...

實(shí)際上因?yàn)槭M(jìn)制數(shù)二進(jìn)制或操作可以看做是 兩個(gè)數(shù)之間 的加和!

如 1 | 2 == 3, 2 | 4 == 6

所以選取選項(xiàng)的值,原則遵循 下一個(gè)選項(xiàng)值比前面所有選項(xiàng)值加和大即可;

例如可以這樣設(shè)計(jì):

0 E_NONE 1 E_NOTICE 2 E_WARN 4 E_ERROR 8 E_ALL

0 < 1

0 + 1 < 2;

 0 + 1 + 2 = 3 < 4

 0 + 1 + 2 + 4 = 7 < 8

以此類推

設(shè)置選項(xiàng)時(shí),比如想要E_ALL登記,卻要排除E_NOTICE, 直接 E_ALL & ~E_NOTICE 即可!

用Java編寫一個(gè)簡(jiǎn)單的錯(cuò)誤信息上報(bào)功能組件:

 1 public class ReportLevel {
 2   public static final int E_NONE = 0;
 3   public static final int E_NOTICE = 1;
 4   public static final int E_WARNING = 2;
 5   public static final int E_ERROR = 4;
 6 
 7   // all notice/warning/error exception or error 8   public static final int E_ALL = 7;
 9 
10   public static int REPORT_LEVEL;
11 
12   public static void setReportLevel(int reportLevel) {
13         REPORT_LEVEL = reportLevel;
14     }
15 
16   public static boolean shouldReportNotice() {
17 return (REPORT_LEVEL & E_NOTICE) != 0;
18     }
19 
20   public static boolean shouldReportWarning() {
21 return (REPORT_LEVEL & E_WARNING) != 0;
22     }
23 
24   public static boolean shouldReportError() {
25 return (REPORT_LEVEL & E_ERROR) != 0;
26     }
27 }

測(cè)試使用:

 1 public class ReportLevelTest {
 2 
 3     @Test
 4   public void testAddLevel() {
 5         ReportLevel.setReportLevel(ReportLevel.E_WARNING | ReportLevel.E_ERROR);
 6 
 7         Assert.assertTrue(ReportLevel.shouldReportWarning());
 8         Assert.assertTrue(ReportLevel.shouldReportError());
 9 
10         Assert.assertFalse(ReportLevel.shouldReportNotice());
11     }
12 
13     @Test
14   public void testExcludeLevel() {
15 //        寫為 ReportLevel.E_ALL ^ ReportLevel.E_NOTICE 也可以
16 //        ReportLevel.setReportLevel(ReportLevel.E_ALL & ~ReportLevel.E_NOTICE);17         ReportLevel.setReportLevel(ReportLevel.E_ALL ^ ReportLevel.E_NOTICE);
18 
19         Assert.assertTrue(ReportLevel.shouldReportWarning());
20         Assert.assertTrue(ReportLevel.shouldReportError());
21 
22         Assert.assertFalse(ReportLevel.shouldReportNotice());
23     }
24 
25     @Test
26   public void testNone() {
27         ReportLevel.setReportLevel(ReportLevel.E_NONE);
28 
29         Assert.assertFalse(ReportLevel.shouldReportWarning());
30         Assert.assertFalse(ReportLevel.shouldReportError());
31         Assert.assertFalse(ReportLevel.shouldReportNotice());
32     }
33 }

網(wǎng)頁題目:設(shè)計(jì)配置選項(xiàng)等級(jí)系統(tǒng)-創(chuàng)新互聯(lián)
分享路徑:http://weahome.cn/article/ihghj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部