package genericity; public class Order{ String ordername; int orderID; //类内部就可以直接使用类的泛型 T orderT; public Order(){ } public Order(String ordername,int orderID,T orderT){ this.orderID=orderID; this.ordername=ordername; this.orderT=orderT; } }
-
这里我们声明了一个T类型的orderT,以后我们使用的时候就可以定义为想要的类型
package genericity; public class OrderTest { public static void main(String[] args) { Order order = new Order(); Orderorder1 = new Order<>("AA",100,"BB"); order1.setOrderT("String"); } }
-
如果我们定义了泛型类,在实例化的时候未指明类的泛型,则默认为Object类型,但我们并不建议这样做,因为这样做就失去了使用泛型的意义.因此在进行自定义泛型类的实例化时必须要指明泛型类的类型
-
在上面的代码中我们指明了自定义的类型为String型,所以以后我们使用时都为String型的
-
当子类继承父类时未指明泛型类型,则子类不是泛型类
public class Son extends Father
{ //此时Son不是泛型类 } -
当子类继承父类时指明了泛型类型,则子类也为泛型类,且实例化子类对象时,不需再指明
public class Son
extends Father { //此时Son是泛型类 }
1.当子类继承父类时指明了泛型类,则实例化子类对象时,不需再次声明
2.泛型类可能有多个参数,此时应该将它们放在一起
-
如:
3.泛型类的构造参数无<>
正确示例: public Textclass(){ } 错误示例: public Textclass(){ }
4.实例化以后, *** 作原来泛型位置的结构必须与指定的泛型类型一致
5.泛型不同的引用不能互相赋值
6.泛型如果不指定,将被擦除,泛型对应的类型均按照Object处理,但不等价于Object
-
经验:
要使用泛型就一直使用,要不适用就一直不要使用
7.如果泛型类是一个接口或者一个抽象类,则不可创建泛型类的对象
8.泛型的指定中不能使用基本数据类型,如果需要使用,则使用基本数据类型的包装类替代
9.在类/接口上声明的泛型,在本类或者本接口中即代表某种类型,可以作为非静态属性的类型,非静态方法的参数类型,非静态方法的返回值类型.但在静态方法中不能使用类的泛型
10.异常类不能是泛型的
11.父类有泛型,子类可以选择保留泛型也可以选择自己指定泛型的类型
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)