我有这样一个方法
public static <T> T newInstance(Class<T> clazz) {
try{
    return  clazz.newInstance();
}catch(InstantiationException it){
//
}catch(IllegalAccessException ia){
//
}
}但是我这样写 会报错  “This method must return a result of type T”方法名 static <T> T newInstance(Class<T> clazz) 这个不能变 里面的内容
有谁知道 怎么写就可以了?
顺便问一下 “<T> T newInstance”  中的T代表返回类型如同void ,那最前面的那个<T>有是什么意思呢?
谢谢!

解决方案 »

  1.   

    public static <T> T newInstance(Class<T> clazz)
    throws IllegalAccessException, InstantiationException {
    try {
    return clazz.newInstance();
    } catch (InstantiationException it) {
    //
    } catch (IllegalAccessException ia) {
    //
    } finally {
    return clazz.newInstance();
    }
    }
      

  2.   

    应将该句return clazz.newInstance();改为
    return clazz.newInstance<T>();吧。
      

  3.   

    return clazz.newInstance<T>(); 语法错误!
      

  4.   


    public static <T> T newInstance(Class<T> clazz) {
         try{
         return clazz.newInstance();
         }catch(InstantiationException it){
         //
         }catch(IllegalAccessException ia){
         //
         }
         return null;
        }
      

  5.   

    大哥这就是语法,
    你能告诉我为什么写int a;怎么不写a int;
      

  6.   

    我有这样一个方法
    public static <T> T newInstance(Class<T> clazz) {
    try{
    return (T)clazz.newInstance();
    }catch(InstantiationException it){
    //
    }catch(IllegalAccessException ia){
    //
    }
    }这应该是楼主要的答案吧 
      

  7.   

     是  (T)clazz.newInstance(); 这个意思,但是这样写还是报同样的错误,这个泛型真的把我搞糊涂了,有人能帮我吗?
      

  8.   

    泛型要先声明才能使用 
    前面的<T> 就是指声明一个T类型的泛型 
    后面跟着的那个T才表示返回的类型为T  
    应该范围一个T类型  加一个强转(T)即可
      

  9.   

    public static <T> T newInstance(Class<T> clazz){
    try {
    return (T)clazz.newInstance(); 
    } catch (InstantiationException e) {
    } catch (IllegalAccessException e) {
    }
    return null;
    }
      

  10.   

    这个方法中的泛型<T>可以是任何的类型,因为<T>==<T extends Object>。所以返回类型T相当于返回Object类型,但实际上,在参数传递之后返回类型就被确定了。Class的newInstance()方法返回类型正是传进去参数的泛型类型,所以强制类型转换成T类型是绝对安全的。
    public static void main(String[] args) {
    Class<String> myClass=String.class;
    Integer i=GenericTest.newInstance(myClass);
    }从Eclipse的提示就可以看到,返回类型已经是String了。
      

  11.   

    就是在try内的返回 不对,应该在try外返回,谢谢各位的答案!