2012-07-04 4 views
0

у меня есть 2 классов:Как вернуть родовой объект типа в статическом методе

public class Super { 

    public static <T> T bar(Class<T> clazz){ 

     try { 
      return (T)(clazz.newInstance()); 
     } catch (IllegalAccessException e) {   
      e.printStackTrace(); 
     } catch (InstantiationException e) {   
      e.printStackTrace(); 
     } 
     return null; 
    } 
} 

и

public class Sub extends Super{ 

    public static void main(String[] args){ 
     Sub s = Sub.bar(Sub.class); 

    } 
} 

теперь я не хочу использовать Class<T> clazz как пары из bar, так как я могу вернуть общий тип T, спасибо.

+0

Примечание: Приведение не требуется – Puce

+2

Почему вы не хотите передавать объект класса в качестве параметра bar? – Puce

ответ

2

Вы не можете. Дженерики - это только время компиляции и недоступны во время выполнения. Таким образом, вы получите , чтобы предоставить Class clazz, чтобы знать T во время выполнения.

1

Нет ничего плохого в предоставлении экземпляра класса для создания нового объекта.

Если вашему коду требуется создать объекты или вообще работать с некоторым классом, экземпляр должен быть передан. Это действие не отличается от другого использования объекта. Дженерики должны облегчить ситуацию и обеспечить безопасность типов. Таким образом, в этом случае его можно использовать только в качестве ограничения на класс ведьмы, который может быть создан статическим методом bar, путем установки некоторого ограничения на общий параметр.

BTW.

Вы должны вызвать статический метод из класса, в котором реализованы так, а вместо Sub.bar(Sub.class) вы должны иметь Super.bar(Sub.class).

Смежные вопросы