Как избежать «несоответствия типов» в статическом универсальном заводском методе?

Либо я слишком глуп, чтобы использовать Google, либо пока никто не сталкивался с этой проблемой.

Я ' m пытается скомпилировать следующий код:

public interface MyClass {
  public class Util {
    private static MyClass _this;
    public static <T extends MyClass> T getInstance(Class<T> clazz) {
      if(_this == null) {
        try {
          _this = clazz.newInstance();
        } catch(Exception e) {
          e.printStackTrace();
        }
      }
      return _this;
    }
  }
}

Howerer, в строке "return _this;" Я получаю сообщение об ошибке «Несоответствие типа: невозможно преобразовать MyClass в T» Почему это? T расширяет MyClass, так в чем же проблема? Если я изменю строку на «return (T) _this;», я просто получаю предупреждение о непроверенном приведении, но мне не нравятся предупреждения ;-) Есть ли способ добиться желаемого без ошибок или предупреждений?

5
задан Kim Stebel 31 May 2011 в 20:35
поделиться