java 泛型 extends 多个

  • Post author:
  • Post category:java



http://blog.csdn.net/chjttony/article/details/6801406

1.泛型边界:

Java泛型编程时,编译器忽略泛型参数的具体类型,认为使用泛型的类、方法对Object都适用,这在泛型编程中称为类型信息檫除。

例如:


  1. class

    GenericType{

  2. public


    static


    void

    main(String[] args){
  3. System.out.println(

    new

    ArrayList<String>().getClass());
  4. System.out.println(

    new

    ArrayList<Integer>().getClass());
  5. }
  6. }
class GenericTypepublic static void main(String[] args){  System.out.println(new ArrayList<String>().getClass());  System.out.println(new ArrayList<Integer>().getClass());}}

输出结果为:

java.util.ArrayList

java.util.ArrayList

泛型忽略了集合容器中具体的类型,这就是类型檫除。

但是如果某些泛型的类/方法只想针对某种特定类型获取相关子类应用,这时就必须使用泛型边界来为泛型参数指定限制条件。

例如:


  1. interface

    HasColor{
  2. java.awt.Color getColor();
  3. }

  4. class

    Colored<T

    extends

    HasColor>{
  5. T item;
  6. Colored(T item){

  7. this

    .item = item;
  8. }
  9. java.awt.Color color(){

  10. //调用HasColor接口实现类的getColor()方法

  11. return

    item.getColor();
  12. }
  13. }

  14. class

    Dimension{

  15. public


    int

    x, y, z;
  16. }
  17. Class ColoredDimension<T

    extends

    Dimension & HasColor>{
  18. T item;
  19. ColoredDimension(T item){

  20. this

    .item = item;
  21. }
  22. T getItem(){

  23. return

    item;
  24. }
  25. java.awt.Color color(){

  26. //调用HasColor实现类中的getColor()方法

  27. return

    item.getColor();
  28. }

  29. //获取Dimension类中定义的x,y,z成员变量

  30. int

    getX(){

  31. return

    item.x;
  32. }

  33. int

    getY(){

  34. return

    item.y;
  35. }

  36. int

    getZ(){

  37. return

    item.z;
  38. }
  39. }

  40. interface

    Weight{

  41. int

    weight();
  42. }

  43. class

    Solid<T

    extends

    Dimension & HasColor & Weight>{
  44. T item;
  45. Solide(T item){

  46. this

    .item = item;
  47. }
  48. T getItem(){

  49. return

    item;
  50. }
  51. java.awt.Color color(){

  52. //调用HasColor实现类中的getColor()方法

  53. return

    item.getColor();
  54. }

  55. //获取Dimension类中定义的x,y,z成员变量

  56. int

    getX(){

  57. return

    item.x;
  58. }

  59. int

    getY(){

  60. return

    item.y;
  61. }

  62. int

    getZ(){

  63. return

    item.z;
  64. }

  65. int

    weight(){

  66. //调用Weight接口实现类的weight()方法

  67. return

    item.weight();
  68. }
  69. }

  70. class

    Bounded

    extends

    Dimension

    implements

    HasColor, Weight{

  71. public

    java.awt.Color getColor{

  72. return


    null

    ;
  73. }

  74. public


    int

    weight(){

  75. return


    0

    ;
  76. }
  77. }

  78. public


    class

    BasicBounds{

  79. public


    static


    void

    main(String[] args){
  80. Solid<Bounded> solid =

    new

    Solid<Bounded>(

    new

    Bounded());
  81. solid.color();
  82. solid.getX();
  83. solid.getY();
  84. solid.getZ();
  85. solid.weight();
  86. }
  87. }
interface HasColor{ java.awt.Color getColor();}class Colored<T extends HasColor>{ T item; Colored(T item){  this.item = item;}java.awt.Color color()//调用HasColor接口实现类的getColor()方法 return item.getColor();}}class Dimensionpublic int x, y, z;}Class ColoredDimension<T extends Dimension &am



版权声明:本文为qq_43685474原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。