课程咨询 :186 8716 1620      qq:2066486918

昆明Java培训 > 达内新闻 > 如何创建一个数组让它接受所有可能的类型呢?
  • 如何创建一个数组让它接受所有可能的类型呢?

    发布:昆明Java培训      来源:达内新闻      时间:2016-05-05

  • 昆明java培训现在做一个代码分享,这篇文章的代码主要是针对上一篇文章的问题进行一个讲解,昆明java培训小编希望看不懂得小伙伴回到之前页面去查看。

    public class SimpleCollection<T>

    {

    private T[] objArr;

    private int index = 0;

    public SimpleCollection()

    {

    //Error: Cannot create a generic array of T

    //objArr = new T[10];

    //Warning: Unchecked cast from Object[] to T[]

    objArr = (T[]) new Object[10];

    }

    }

    这个形式虽然可以做到,但是会产生一个警告。

    查看ArrayList中的实现,可以发现它是使用了一个Object类型的数组:

    private transient Object[] elementData;

    在取出的时候(get方法中)使用了类型转换:

    (E) elementData[index];

    泛型和子类

    List<String> ls = new ArrayList<String>(); // 1

    List<Object> lo = ls; // 2

    一个String类型的List是一个Object类的List吗?

    不可以,Java编译器将会在第二行产生一个编译错误,因为它们的类型不匹配。

    这样就避免了如果lo引入加入Object类型的对象,而ls引用试图将其转换为String类型而引发错误。所以编译器阻止了这种可能。

    继承泛型类别

    昆明java培训直接用例子说明:

    父类:

    public class Parent<T1,T2>

    {

    private T1 foo1;

    private T2 foo2;

    public T1 getFoo1()

    {

    return foo1;

    }

    public void setFoo1(T1 foo1)

    {

    this.foo1 = foo1;

    }

    public T2 getFoo2()

    {

    return foo2;

    }

    public void setFoo2(T2 foo2)

    {

    this.foo2 = foo2;

    }   

    }

    子类继承父类:

    public class Child<T1, T2, T3> extends Parent<T1, T2>

    {

    private T3 foo3;

    public T3 getFoo3()

    {

    return foo3;

    }

    public void setFoo3(T3 foo3)

    {

    this.foo3 = foo3;

    }

    }

    实现泛型接口

    昆明java培训泛型接口举例代码分享:

    public interface ParentInterface<T1,T2>

    {

    public void setFoo1(T1 foo1);

    public void setFoo2(T2 foo2);

    public T1 getFoo1();

    public T2 getFoo2();

    }

    子类实现泛型接口:

    public class ChildClass<T1,T2> implements ParentInterface<T1, T2>

    {

    private T1 foo1;

    private T2 foo2;

    @Override

    public void setFoo1(T1 foo1)

    {

    this.foo1 = foo1;

    }

    @Override

    public void setFoo2(T2 foo2)

    {

    this.foo2 = foo2;

    }

    @Override

    public T1 getFoo1()

    {

    return this.foo1;

    }

    @Override

    public T2 getFoo2()

    {

    return this.foo2;

    }

    }

    推荐文章

上一篇:我们为什么要选择使用泛型

下一篇:泛型之中的通配符(Wildcards)使用

最新开班日期  |  更多

Java--零基础全日制班

Java--零基础全日制班

开班日期:11/30

Java--零基础业余班

Java--零基础业余班

开班日期:11/30

Java--周末提升班

Java--周末提升班

开班日期:11/30

Java--零基础周末班

Java--零基础周末班

开班日期:11/30

  • 网址:http://km .java.tedu.cn      地址:昆明市官渡区春城路62号证券大厦附楼6楼
  • 课程培训电话:186 8716 1620      qq:2066486918    全国服务监督电话:400-827-0010
  • 服务邮箱 ts@tedu.cn
  • 2001-2016 达内国际公司(TARENA INTERNATIONAL,INC.) 版权所有 京ICP证08000853号-56