`
iluoxuan
  • 浏览: 573467 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java泛型

    博客分类:
  • java
 
阅读更多

Class<T>在实例化的时候,T要替换成具体类
Class<?>它是个通配泛型,?可以代表任何类型

<? extends T>受限统配,表示T的一个未知子类。
 <? super T>下限统配,表示T的一个未知父类。

 

ava 的泛型,只是编译时作为类型检查,一旦编译完成,泛型就会被擦除,在运行期间是得不到泛型的信息的,包括它的类型参数。有时候我们需要用到泛型的类型参数,反射看起来是取不到的,因反射在运行期间执行,但那时已无泛型的信息。一些构架却办到了,那么它们是怎么实现的呢?请看下面代码: 

[java] view plaincopy
 
  1. import java.lang.reflect.*;  
  2. import java.util.*;  
  3.   
  4. class Test {  
  5.     public static void main(String args[]) throws Exception {  
  6.         Method applyMethod=Test.class.getMethod("applyVector", Vector.class);  
  7.         Type[] types=applyMethod.getGenericParameterTypes();  
  8.         System.out.println(types[0].toString());  
  9.     }  
  10.     public static void applyVector(Vector<Date> v1){  
  11.           
  12.     }  
  13. }  

看到了,实际上是通过获得方法,再取得方法的类型参数,这样泛型的实际类型参数就出来了。上面代码输出:java.util.Vector<java.util.Date>,如果不只一个参数,要具体的类型参数呢?

[java] view plaincopy
 
  1. import java.lang.reflect.*;  
  2. import java.util.*;  
  3.   
  4. class Test {  
  5.     public static void main(String args[]) throws Exception {  
  6.         Method applyMethod=Test.class.getMethod("applyVector", Vector.class);  
  7.         Type[] types=applyMethod.getGenericParameterTypes();  
  8.         ParameterizedType pType=(ParameterizedType)types[0];  
  9.         System.out.println(pType.getActualTypeArguments()[0]);  
  10.         System.out.println(pType.getRawType());  
  11.   
  12.     }  
  13.     public static void applyVector(Vector<Date> v1){  
  14.           
  15.     }  
  16. }  

输出:

class java.util.Date
class java.util.Vector


可见,getActualTypeArguments 能取得实际类型参数,getRawType() 取得原本的类型。

 

 3:T...java中可变参数

Java1.5增加了新特性:可变参数:适用于参数个数不确定,类型确定的情况,java把可变参数当做数组处理。注意:可变参数必须位于最后一项。当可变参数个数多余一个时,必将有一个不是最后一项,所以只支持有一个可变参数。因为参数个数不定,所以当其后边还有相同类型参数时,java无法区分传入的参数属于前一个可变参数还是后边的参数,所以只能让可变参数位于最后一项。

可变参数的特点:

(1)、只能出现在参数列表的最后; 

(2)、...位于变量类型和变量名之间,前后有无空格都可以;

(3)、调用可变参数的方法时,编译器为该可变参数隐含创建一个数组,在方法体中一数组的形式访问可变参数。

apache lang 中StringUtils

@Test
    public void testJoin_Objects() {
        assertEquals("abc", StringUtils.join("a", "b", "c"));
        assertEquals("a",   StringUtils.join(null, "", "a"));
        assertEquals(null,  StringUtils.join((Object[])null));
    }

 public static <T> String join(final T... elements) {
        return join(elements, null);
    }

 public static String join(final Object[] array, final String separator) {
        if (array == null) {
            return null;
        }
        return join(array, separator, 0, array.length);
    }


 public static String join(final Object[] array, String separator, final int startIndex, final int endIndex) {
        if (array == null) {
            return null;
        }
        if (separator == null) {
            separator = EMPTY;
        }

        // endIndex - startIndex > 0:   Len = NofStrings *(len(firstString) + len(separator))
        //           (Assuming that all Strings are roughly equally long)
        final int noOfItems = endIndex - startIndex;
        if (noOfItems <= 0) {
            return EMPTY;
        }

        final StringBuilder buf = new StringBuilder(noOfItems * 16);

        for (int i = startIndex; i < endIndex; i++) {
            if (i > startIndex) {
                buf.append(separator);
            }
            if (array[i] != null) {
                buf.append(array[i]);
            }
        }
        return buf.toString();
    }

 

 

分享到:
评论

相关推荐

    Java泛型编程指南.pdf

    Java泛型编程指南.pdf 此文章译自SUN的泛型编程指南

    Java泛型和集合

    Java Generics and Collections 英文版,详细描述java 泛型技术

    java 泛型类的类型识别示例

    java 泛型类的类型识别示例 java 泛型类的类型识别示例 java 泛型类的类型识别示例

    java 泛型接口示例

    java 泛型接口示例 java 泛型接口示例 java 泛型接口示例

    Java泛型的用法及T.class的获取过程解析

    主要介绍了Java泛型的用法及T.class的获取过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    java 泛型方法使用示例

    java 泛型方法使用示例 java 泛型方法使用示例 java 泛型方法使用示例

    JAVA泛型加减乘除

    这是一个使用JAVA实现的泛型编程,分为两部分,第一部分创建泛型类,并实例化泛型对象,得出相加结果。 第二部分用户自行输入0--4,选择要进行的加减乘除运算或退出,再输入要进行运算的两个数,并返回运算结果及...

    java泛型技术之发展

    java泛型技术之发展,学习JAVA 泛型的不错东东

    1.java泛型定义.zip

    1.java泛型定义.zip1.java泛型定义.zip1.java泛型定义.zip1.java泛型定义.zip1.java泛型定义.zip1.java泛型定义.zip1.java泛型定义.zip1.java泛型定义.zip1.java泛型定义.zip1.java泛型定义.zip1.java泛型定义.zip1....

    很好的Java泛型的总结

    很好的Java泛型的总结,看完之后你一定会知道java泛型的底层机制,你一定会学会Java泛型!

    4.java泛型的限制.zip

    4.java泛型的限制.zip4.java泛型的限制.zip4.java泛型的限制.zip4.java泛型的限制.zip4.java泛型的限制.zip4.java泛型的限制.zip4.java泛型的限制.zip4.java泛型的限制.zip4.java泛型的限制.zip4.java泛型的限制.zip...

    java泛型学习ppt

    java,学习java泛型,java培训之泛型.pptxjava培训之泛型.pptxjava培训之泛型.pptxjava培训之泛型.pptx

    java泛型总结

    深入理解java泛型,包括类名泛型的定义,方法泛型定义,泛型的返回

    SUN公司Java泛型编程文档

    Sun公司的Java泛型编程文档,英文原版和网络翻译版,想对泛型有更清楚的认识的朋友可以看看,必定会有所帮助

    java泛型详解.pdf

    java泛型详解.pdf

    JAVA泛型简单排序实例

    JAVA泛型源代码实现以下功能:返回数组元素的最大值/最小值下标;判断数组元素是否按升序排列;T对象数组排序;二分法查找key元素;

    思维导图之Java泛型详解

    思维导图之Java泛型详解

    Java泛型技术之发展

    Java泛型技术之发展

    JAVA泛型教程(帮你解决学习泛型的苦恼)

    JAVA泛型教程(帮你解决学习泛型的苦恼). Java 泛型编程可能会碰到很多问题,本教程可能会对你有帮助哦。

Global site tag (gtag.js) - Google Analytics