風(fēng)人園

          弱水三千,只取一瓢,便能解渴;佛法無邊,奉行一法,便能得益。
          隨筆 - 99, 文章 - 181, 評論 - 56, 引用 - 0
          數(shù)據(jù)加載中……

          jdk1.5 Variable-Arity Methods(Varargs)

          Variable-Arity Methods(Varargs)
          可匹配不同長度的自變量的函數(shù),意思就是說,定義好的同一個Method,可以接收個數(shù)不一樣的變量,看起來有點類似于過載。
          我們還是先來看一個例子吧。

          [code]
          //TestVarargs.java
          public class TestVarargs{


          //這個方法展示了varargs的基本語法
          // 類型(Type),加3個點,再加變量名,中間可以有或無空格
          // 而使用該變量時,是以一個Type[]的形式的,等于是一個Array
          //public static void out(int...? ?i){//這種可以
          //public static void out(int??...i){//這種也可以
          //public static void out(int??...??i){//這種也可以
          public static void out(int...i){//這種也可以
          ? ? ? ? System.out.println("method:out(int... i),vararg.length:"+i.length);
          ? ? ? ? if(i.length==0)
          ? ? ? ? ? ? ? ? return;
          ? ? ? ? //for-each??featrue
          ? ? ? ? for(Object ii:i)
          ? ? ? ? ? ? ? ? System.out.print("\t "+ii);
          ? ? ? ? System.out.println();
          ? ? ? ? }

          //和 out(Object... i) 存在二義性
          //public static void out(int i1,int... i){...}


          //varargs 只能出現(xiàn)在parameter的最后
          //public static void out(int... i,String s){...}

          //當(dāng)然,其他變量可以出現(xiàn)在前面。
          public static void out(String s,int... i){
          ? ? ? ? System.out.println("method:out(String s,int... i),vararg.length:"+i.length);
          ? ? ? ? if(i.length==0)
          ? ? ? ? ? ? ? ? return;
          ? ? ? ? //for-each??future
          ? ? ? ? for(int ii:i)
          ? ? ? ? ? ? ? ? System.out.print("\t "+ii);
          ? ? ? ? System.out.println();
          ? ? ? ? }

          public static void main(String args[]){
          ? ? ? ? out(123,1343,4542,677675);
          ? ? ? ? out(12323,43243,00);
          ? ? ? ? out("",12);
          ? ? ? ? out("");
          ? ? ? ? out();
          ? ? ? ? }
          }
          [/code]
          該說明的基本上都在源碼的注釋里頭了。
          值得一提的是,根據(jù)JSR201的說法,對它的支持主要是在complier上,在VM的層面上是不需要支持的。在某種意義上,我們可以把它看作
          [code]
          ? ? ? ? out(int...i){};
          ? ? ? ? out(123,1343,4542,677675);
          ? ? ? ? ==
          ? ? ? ? out(int[] i){};
          ? ? ? ? out(new Int[]{123,1343,4542,677675});
          [/code]

          posted on 2006-12-16 15:55 風(fēng)人園 閱讀(515) 評論(0)  編輯  收藏 所屬分類: Java

          主站蜘蛛池模板: 常州市| 肇州县| 白银市| 南木林县| 金阳县| 贵州省| 富锦市| 同仁县| 进贤县| 荥阳市| 东安县| 武山县| 香港 | 雅安市| 湛江市| 上思县| 襄城县| 洛南县| 封开县| 慈利县| 江陵县| 柏乡县| 黄大仙区| 昌都县| 沁阳市| 广平县| 新化县| 伊春市| 叙永县| 巨鹿县| 铜陵市| 彭山县| 河津市| 衢州市| 渝北区| 格尔木市| 环江| 太仆寺旗| 多伦县| 岢岚县| 彭阳县|