泛型java实例
1. java 泛型如何使用
拿LIST做例子吧,泛型就是保证了LIST存储的内容的类型。
比如List<String> slist,那就可以直接往slist里存String类型的东西,取出来时也不用做类型转换,直接slist.get(i)就是取出内容了。如果非泛型的LIST,取出来是object类型,要做类型转换
2. java泛型的作用,举例说明!
  简言之,泛型是为了避免类转换异常的发生,使程序操作更安全,举例:
1、声明泛型:
class Point<T>{
    private T var;
    public T getVar(){
        return var;
    }
    public void setVar(T var){
        this.var=var;
    }
}
2、使用Point类将var的类型设置成整数
public class Test{
    public static void maint(String[] args){
    Point<Integer> p=new Point<Integer>();//var类型为Integer
    p.setVar(30);//设置数字,自动装箱
    System.out.println(p.getVar() * 2);
    }
}
3、运行:60
 
分析:使用泛型强制类型为某类型,比如上面为Integer,在使用setVar()方法时如果参数不是Integer(如String),程序就会报错,提示输入非法。当然你认为也可以不用泛型,比如将Point定义如下:
class Point1{
private Object var;
public Object  getVar(){
return var;
}
public void setVar(Object var){
this.var=var;
}
}
    此时,Test程序依然可以运行,但是如果将Test改动如下:
public class Test{
public static void maint(String[] args){
Point1 p=new Point1();
p.setVar(“江山美人");
System.out.println(p.getVar() * 2);
}
}
    程序编写正常,不会报错,但到了运行才提示异常。而如果上面是应用泛型,在写下System.out.println(p.getVar() * 2);直接就会在写程序时提示错误!
    这样就达到了使用泛型的目的——避免类转换异常的发生,使程序操作更安全。
    希望能帮到你!
3. java中 如何得到泛型参数的类型,并在另一个方法中使用
在Java编程语言中,处理泛型时,获取泛型参数类型并在其他方法中使用是一个有趣的挑战。考虑以下示例代码:
public class B {
public <T> T set(T t) {
return t; //这里接受到return回去。
}
public void get() {
//注意这里String不是B的子类,会报错。
T t = (T) set(new String());
}
}
在这个例子中,我们定义了一个名为B的类。类中包含两个方法:set和get。set方法接受一个泛型参数T,并返回该参数。get方法尝试将一个String实例转换为泛型类型T。
然而,直接在get方法中使用泛型参数T时会遇到类型转换错误。这是因为Java泛型在运行时被擦除,导致编译器无法保证T的具体类型。为了在get方法中正确使用T,我们需要一些额外的逻辑,例如通过反射获取类型信息。
例如,可以通过以下方式改进get方法:
public void get() {
ParameterizedType parameterizedType = getClass().getGenericSuperclass();
Type[] actualTypeArguments = parameterizedType.getActualTypeArguments();
Type tType = actualTypeArguments[0];
T t = (T) set(new String());
}
通过这种方式,我们可以在运行时获取泛型参数类型,并在get方法中使用它。这种方法需要使用反射API来访问泛型类型信息。
需要注意的是,这种方法在某些场景下可能会引入额外的开销,并且可能违反类型安全性。因此,在实际项目中使用时应谨慎考虑。
此外,还可以通过创建一个泛型类或接口,使泛型参数类型在类或接口级别上定义,从而在方法中更方便地使用。例如:
public class B<T> {
public T set(T t) {
return t;
}
public void get() {
T t = (T) set(new String());
}
}
通过这种方式,泛型参数T在类级别上定义,可以在类的所有方法中直接使用,无需额外的类型转换。
总之,在Java中处理泛型参数类型时,需要灵活运用反射和泛型类等技术来实现所需功能。同时,应考虑性能和类型安全性的平衡,选择最适合项目需求的方法。
