title: What's the problem of this generic code(if returns without casting (T) it fails)
body: <p>When i build this code with maven, it shows me the error "PRequest cannot be converted to T".</p>
  
  <ol>
  <li><p>if i cast the return value of 'getRequest(Object params)' method of Parent 
  build succeed.</p></li>
  <li><p>if i write is as 
  public abstract PRequest getRequest(Map params);
  build succeed.</p></li>
  </ol>
  
  <pre class="lang-java prettyprint-override"><code>public abstract class Parent&lt;T extends CommonRequest&gt; {
      public abstract T getRequest(Map&lt;String, Object&gt; params);
  
      public T getRequest(Object params) {
          // ERROR PRequest cannot be converted to T
          return params instanceof Map ?
              getRequest((Map)params) :
              getRequest(JacksonUtil.getMapper().convertValue(params, Map.class));
      }
      ...
  }
  
  public class Child extends Parent&lt;PRequest&gt; {
      @Override
      public PRequest getRequest(Map&lt;String, Object&gt; params) {
          return new PRequest();
      }
      ...
  }
  
  public class PRequest extends CommonRequest {
      ...
  }
  </code></pre>
  
  <p>i want to know why error occurs when i write return type as T with out casting like "(T)getRequest((Map)params)"</p>