-
2021-02-12 21:15:24
我有一个实用程序方法,可以从某些对象中创建一个元素列表:
public static final List list(T t) {
final List rv = new ArrayList<>();
rv.add(t);
return rv;
}
我也有一个接受类型为List< Class>的参数的方法.因此,我必须创建该类型的对象.这是我尝试做的事情:
final Class> aClass = Integer.class;
final List> trivialListOfClasses = list(aClass);
……这失败了:
[javac] /some/path/Foo.java:41: error: incompatible types
[javac] final List> trivialListOfClasses = list(aClass);
[javac] ^
[javac] required: List>
[javac] found: List>
[javac] where CAP#1 is a fresh type-variable:
[javac] CAP#1 extends Object from capture of ?
[javac] 1 error
完成上述任务的正确方法是什么?我了解有关Java泛型不变的部分,但是到底发生了什么?
更多相关内容 -
浅谈java中定义泛型类和定义泛型方法的写法
2020-08-31 08:07:13下面小编就为大家带来一篇浅谈java中定义泛型类和定义泛型方法的写法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧 -
Java 自定义泛型类的举例
2021-12-30 21:07:16下面我们首先写出一个泛型类 package genericity; public class Order<T> { String ordername; int orderID; //类内部就可以直接使用类的泛型 T orderT; public Order(){ } public Order...一.下面我们首先写出一个泛型类
package genericity; public class Order<T> { 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(); Order<String> order1 = new Order<>("AA",100,"BB"); order1.setOrderT("String"); } }
-
如果我们定义了泛型类,在实例化的时候未指明类的泛型,则默认为Object类型,但我们并不建议这样做,因为这样做就失去了使用泛型的意义.因此在进行自定义泛型类的实例化时必须要指明泛型类的类型
-
在上面的代码中我们指明了自定义的类型为String型,所以以后我们使用时都为String型的
三.自定义泛型类的继承
-
当子类继承父类时未指明泛型类型,则子类不是泛型类
public class Son extends Father<Integer>{ //此时Son不是泛型类 }
-
当子类继承父类时指明了泛型类型,则子类也为泛型类,且实例化子类对象时,不需再指明
public class Son<T> extends Father<Integer>{ //此时Son是泛型类 }
四. 使用自定义泛型类时的注意点
1.当子类继承父类时指明了泛型类,则实例化子类对象时,不需再次声明
2.泛型类可能有多个参数,此时应该将它们放在一起
-
如: <E1,E2,E3>
3.泛型类的构造参数无<>
正确示例: public Textclass(){ } 错误示例: public Textclass<E>(){ }
4.实例化以后,操作原来泛型位置的结构必须与指定的泛型类型一致
5.泛型不同的引用不能互相赋值
6.泛型如果不指定,将被擦除,泛型对应的类型均按照Object处理,但不等价于Object
-
经验:
要使用泛型就一直使用,要不适用就一直不要使用
7.如果泛型类是一个接口或者一个抽象类,则不可创建泛型类的对象
8.泛型的指定中不能使用基本数据类型,如果需要使用,则使用基本数据类型的包装类替代
9.在类/接口上声明的泛型,在本类或者本接口中即代表某种类型,可以作为非静态属性的类型,非静态方法的参数类型,非静态方法的返回值类型.但在静态方法中不能使用类的泛型
10.异常类不能是泛型的
11.父类有泛型,子类可以选择保留泛型也可以选择自己指定泛型的类型
-
-
java 通过泛型创建对象
2022-01-18 11:11:57java 根据泛型创建对象,实例化泛型对象_Sirius的博客-CSDN博客_泛型创建对象实例化泛型对象在你发布的代码中,不可能创建一个泛型T,因为你不知道它是什么类型:public class Abc<T>{ public T ...百度一下啥也没有,先看看这个吧
老实说我没看懂
换个思路,传入demo,或者class
public static <T> void toIPageVo(IPage foIPage, IPageVo<T> iPageVo,T voDemo) throws InvocationTargetException, IllegalAccessException { List foList = foIPage.getRecords(); List toList = new ArrayList<T>(); for (Object foRecord : foList) { T vo=null; try { vo = (T) voDemo.getClass().newInstance(); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } BeanUtilImpl.copyToVo(vo,foRecord); toList.add(vo); } iPageVo.setRecords(toList); iPageVo.setCurrent(foIPage.getCurrent()); iPageVo.setSize(foIPage.getSize()); iPageVo.setTotal(foIPage.getTotal()); iPageVo.setPages(foIPage.getPages()); }
public static <T> void toIPageVo(IPage foIPage, IPageVo<T> iPageVo,Class clazz) throws InvocationTargetException, IllegalAccessException { List foList = foIPage.getRecords(); List toList = new ArrayList<T>(); for (Object foRecord : foList) { T vo=null; try { vo = (T) clazz.newInstance(); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } BeanUtilImpl.copyToVo(vo,foRecord); toList.add(vo); } iPageVo.setRecords(toList); iPageVo.setCurrent(foIPage.getCurrent()); iPageVo.setSize(foIPage.getSize()); iPageVo.setTotal(foIPage.getTotal()); iPageVo.setPages(foIPage.getPages()); }
-
java创建泛型
2017-09-07 15:05:04一、创建泛型类 /** * 测试类 * @author LD * * @param */ public class Student { private T name; private T age; public Student(T name, T age){ this.name = name; this.age = age; } ...一、创建泛型类
/** * 测试类 * @author LD * * @param <T> */ public class Student<T> { private T name; private T age; public Student(T name, T age){ this.name = name; this.age = age; } public T getName() { return name; } public T getAge() { return age; } /** * 根据性别返回不同的值 * @param sex * @return */ public T getUserInfo(int sex){ if(sex == 1){ return name; }else{ return age; } } public static void main(String[] args) { Student<String> student = new Student<>("peter", "18"); System.out.println(student.getName()); //peter System.out.println(student.getAge()); //18 System.out.println(student.getUserInfo(1)); //peter System.out.println(student.getUserInfo(2)); //18 } }
二、创建泛型方法public class TestClass { public static void main(String[] args) { /** 不指定泛型的时候 */ int i = TestClass.add(1, 2); // 这两个参数都是Integer,所以T替换为Integer类型 Number f = TestClass.add(1, 1.2);// 这两个参数一个是Integer,另一个是Float,所以取同一父类的最小级,为Number Object o = TestClass.add(1, "asd");// 这两个参数一个是Integer,另一个是String,所以取同一父类的最小级,为Object /** 指定泛型的时候 */ int a = TestClass.<Integer>add(1, 2);// 指定了Integer,所以只能为Integer类型或者其子类 int b = TestClass.<Integer>add(1, 2.2);// 编译错误,指定了Integer,不能为Float Number c = TestClass.<Number>add(1, 2.2); // 指定为Number,所以可以为Integer和Float } // 这是一个简单的泛型方法 public static <T> T add(T x, T y) { return y; } }
-
java – 如何按类类型创建泛型类型安全HashMap?
2021-03-17 17:31:28你需要存储某种类型的对象,如果你想在地图中放置任何其他对象,那么从这开始:Map,Object> values = new HashMap<>();这必须这样做,因为?不是具体对象,但对于地图存储的类型,对象是.所以下面的代码片段可以... -
在java中如何创建泛型数组
2019-11-08 09:37:30如何创建泛型java数组 问题 数组是不能通过泛型创建的,因为我们不能创建不可具体化的类型的数组。如下面的代码: public class GenSet<E> { private E a[]; public GenSet() { a = new... -
Java_如何编写自己的泛型类
2021-07-06 15:03:18Java中为什么要使用泛型,是因为泛型使用起来非常之方便,泛型类/方法针对于面向复用的开发。当我们想让一个类/方法同时适配于多种数据类型,这将大大省去我们编写重复代码的时间。 举一个常见的例子说明: List<... -
java – 在泛型类中创建泛型方法名称?
2021-03-22 14:53:01目前,我有这样的事情: – public class MyHolder { ...虽然这是一个非常简单的例子,但是如果我创建一个带有N个泛型属性的泛型持有者类,那么它将它称为有意义的东西而不是getValue1()或getValue2()等等会很高兴. 谢谢. -
java泛型接口泛型类泛型方法_java泛型创建对象
2020-09-13 14:21:431泛型的类型参数只能是类类型包括自定义类不能是简单类型 2同一种泛型可以对应多个版本因为参数类型是不确定的不同版本的泛型类实例是不兼容的 3泛型的类型参数可以有多个 4泛型的参数类型可以使用extends语句例如... -
Java的泛型类
2020-12-04 15:20:33常见形式有泛型类,泛型接口,泛型方法。 语法 <T,…> T称为类型占位符,表示一种引用类型。 好处: 提高代码的重用性 防止类型转换异常,提高代码的安全性 泛型类 案例 /* * 泛型类 * 语法:类名<... -
Java泛型使用反射从方法(创建对象)获取Type
2021-02-12 16:41:00我创建了以下接口和类Java泛型使用反射从方法(创建对象)获取Typepublic interface BuilderType {}public class MyObject implements BuilderType {private int i;private MyObject() {}public int... -
如何在Java中创建泛型方法?
2021-03-18 10:24:25} 出于好奇,我想知道是否有办法使用Java Generics做到这一点: // note: this is an example and does not work public static void update(String name, type) { type var = findByName(name); ... } 有没有办法在... -
Java中泛型数组创建总结
2021-02-26 18:21:15在java中,可以声明一个泛型数组,不能通过直接通过T[] tarr=new T[10]的方式来创建数组,最简单的方式便是通过Array.newInstance(Classtype,int size)的方式来创建数组例如下面的程序。public class ArrayMaker {... -
java反射与泛型综合例子
2019-07-28 07:00:40NULL 博文链接:https://zouwu85.iteye.com/blog/801921 -
java泛型,泛型类详解
2021-03-11 17:35:52之前给大家介绍了一下java泛型集合方面的内容,下面要给大家介绍的就是泛型类方面的知识,一起通过简单的文章来进行一下了解吧。泛型类除了能够定义泛型集合之外,还能够直接限定泛型类的类型参数。语法格式:... -
Java如何:从具有泛型的类创建泛型数组?
2021-03-09 09:24:14中创建一个O []在从FirstClass< O>调用的例程中,其中O是通用类参数.我找不到如何执行此操作.我特别需要O [](而不是ArrayList O或类似的东西),因为我需要经常在循环体内获取它的元素,这对我算法的执行时间很... -
JAVA泛型-泛型类的继承
2021-10-20 21:38:501.泛型类的继承语法 1.1 方式一 :子类也是泛型类 1.子类的泛型类型要和父类的泛型类型一致 class GenericChild<T> extends GenericFather<T> 2.子类的泛型类型要包含父类的泛型类型 class ... -
Java泛型(泛型类、泛型方法、泛型接口)
2021-09-12 21:41:51目录标题泛型引入1. 泛型类特点2. 最简单泛型类3. 泛型方法4. 泛型接口5. 泛型类可是同时设置多个类型参数6. 泛型的类型参数可以是泛型类7...这样就解决了多个相似的类(方法、接口 )创建的问题,一个泛型类即可代替所 -
Java泛型类
2021-03-05 19:24:21Java泛型类声明除了类名之后是类型参数部分,其它看起来像非泛型类声明。泛型类的类型参数部分可以有一个或多个类型参数,它们之间用逗号分隔。这些类称为参数化类或参数化类型,因为它们接受一个或多个参数。语法... -
02_Java 泛型 泛型类的声明,命名约定,泛型类的使用示例
2021-03-23 23:54:19Java 泛型Java 泛型类声明语法以及...T是传递给泛型类Box的类型参数,当创建一个Box对象时就要传递了。 Box<类型参数>:类型参数可以有多个,以逗号隔开。 示例 泛型类 public class Box<T> { private -
【Java泛型】泛型类
2022-01-19 22:49:27一、泛型类 1.泛型类的定义语法: Class 类名称<泛型标识,泛型标识...> { private 泛型标识 变量名; ...import java.util.ArrayList;... // 泛型类在创建对象的时候,来指定操作的具体数据类型 ... -
【Java 泛型】泛型用法 ( 泛型类用法 | 泛型方法用法 | 泛型通配符 ? | 泛型安全检查 )
2021-09-06 22:32:37一、泛型类用法、 二、泛型方法用法、 三、泛型通配符 、 四、泛型安全检查、 -
java中创建泛型数组的方法
2021-03-13 01:37:09我们对于数组的创建,需要遵照一定的规则,就拿泛型数组来说,其实是不适合在java中建立的。不过也不是没有其他的方法,我们依旧可以用一些特殊的方法,达到数组的创建。本篇就以泛型数组为例,探讨其创建的方法。... -
Java反射、泛型、容器
2021-03-22 17:04:50反射一、什么是反射?Class是反射的核心。JVM中每个Class实例都指向一个数据类型(class或者interface),而这个实例又包含有...创建一个实体类Person:package com.company.demo2;public class Person {public String ... -
Java如何创建泛型集合?
2021-03-10 09:24:04在此示例中,您将学习如何创建泛型集合。使用泛型集合,您可以定义存储在集合中的对象的类型。在大多数情况下,使用集合时,您会在其中存储相同类型的对象。因此,如果您知道要存储在集合中的内容以及在尝试从其中... -
JAVA泛型-泛型类的定义和使用
2021-10-18 22:03:371. 泛型类的声明语法 class 类名 <泛型标识,泛型标识…>{ private 泛型标识 属性名; … } 常用的泛型标识 : T,E,K,V (对应符号的具体含义在后面进行补充) 2.自定义一个泛型类 2.1 定义一个泛型类 /** ... -
java泛型-限制泛型类型
2021-02-12 21:06:31java泛型-限制泛型类型前面我们讲的泛型,可以是任意类型,但是我们有时候,需要限制类型,这样更加安全。我们通过实例理解下,我们新建一个Animal类,然后再搞两个子类Dog和Cat类:packagecom.java1234.chap06.sec... -
java泛型——泛型类、泛型方法、泛型接口
2021-05-19 09:32:51泛型Java 泛型Java 泛型是什么泛型类泛型类的格式泛型类举例泛型方法泛型方法的格式泛型方法举例泛型接口泛型接口的格式泛型接口举例 Java 泛型 Java 泛型是什么 官方定义: 泛型是Java SE 1.5的新特性,泛型的本质... -
Java中创建泛型数组
2021-02-12 09:45:38Java中创建泛型数组使用泛型时,我想很多人肯定尝试过如下的代码,去创建一个泛型数组T[] array = new T[];当我们写出这样的代码时编译器会报Cannot create a generic array of T,初学泛型时,看到这个错就以为Java...