import java.util.ArrayList;
import java.util.List;
public class Main
{
public static void main(String[] args)
{
Class clazz = A.class; //接口可以
Class zList1 = List.class; //没问题
Class<A> zList2 = List<A>.class; //问题所在
List<? extends A> list = new ArrayList<A>();
list.getClass(); //可以
}}
interface A
{
void show();
}请问List集合加上范型后为什么不能用.class得到相应的Class对象了?
本身接口和集合都是可以直接用.class得到Class对象的.请解释~谢.
泛型不管怎么泛,总是有种类型的吧?
你的A没有定义,肯定报错的,就像没有定义class一样
List<A>.class 并不是个Class<A>还有List<A>是什么意思?List<A>只是个声明,不能放右边吧。好像没这种写法。一般都是List<A> l = new ArrayList<A>();等等写法。Class<A> zList3 = (Class<A>) new ArrayList<A>().getClass();这样倒是可以个人看法而已!
不想通过实例的getClass()方法得到对象,对于List<A> 请问怎么解决?
有限定,就用限定.
Class<A> zList2 = (Class)List.class;List<A>只是个声明,泛型声明好像都没有方法和属性吧(没有.class(),没有.getClass())List<A> l = new ArrayList<A>;//List<A>什么属性也没有,跟List是不同的。但 l 就可以用l.getClass()了
List<A>这个泛型<A>代表的是你的Class类或Object
这本书的电子版可以到我博客里参考
假设 List<A>.class 语句合法,那么该语句所产生的效果和List.class相同(类对象并不会因为泛型的关系而有所改变),在这种情况下,允许前者合法对程序编写不但没有什么助益,反而会造成一定的混淆,因此编译器采取认定其为非法的策略~
假设 List <A>.class 语句合法,那么该语句所产生的效果和List.class相同(类对象并不会因为泛型的关系而有所改变),在这种情况下,允许前者合法对程序编写不但没有什么助益,反而会造成一定的混淆,因此编译器采取认定其为非法的策略~
//举个实例
import java.util.*;
public class ArrayList1{
public static void main(String [] args)
{
ArrayList<Integer> ary=new ArrayList<Integer>();
ary.add(9);
ary.add(44);
ary.add(4);
int min=ary.get(0);
int max=ary.get(ary.size()-1);
for(Integer i:ary){
if(max<i)
{
max=i;
}
if(min>i){
min=i;
}
}
System.out.println("min: "+min);
System.out.println("max: "+max);
}}