title: Collection becomes a raw type
body: <p>For example we have some AbsractClass</p>
  
  <pre><code>package inherit;
  
  import java.util.HashSet;
  import java.util.Set;
  
  /**
   * TODO: Add comment
   *
   * @author Ruslan Ibragimov
   */
  public abstract class AbstractClass&lt;T extends Integer&gt; {
  
      private Set&lt;String&gt; strings = new HashSet&lt;&gt;();
  
      private T value;
  
      public Set&lt;String&gt; getStrings() {
          return strings;
      }
  
      public void setStrings(Set&lt;String&gt; strings) {
          this.strings = strings;
      }
  
      public void addString(String string) {
          strings.add(string);
      }
  
      public T getValue() {
          return value;
      }
  
      public void setValue(T value) {
          this.value = value;
      }
  }
  </code></pre>
  
  <p>And some child:</p>
  
  <pre><code>package inherit;
  
  /**
   * TODO: Add comment
   *
   * @author Ruslan Ibragimov
   */
  public class InheritClass extends AbstractClass&lt;Integer&gt; {
  
  
  }
  </code></pre>
  
  <p>Lets do simple test</p>
  
  <pre><code>package inherit;
  
  /**
   * TODO: Add comment
   *
   * @author Ruslan Ibragimov
   */
  public class TestClass {
  
      public static void main(String[] args) {
          TestClass testClass = new TestClass();
          testClass.test(new InheritClass());
      }
  
      private AbstractClass test(AbstractClass aClass) {
          for (String string : aClass.getStrings()) {
              System.out.println(string);
          }
          return aClass;
      }
  }
  
  
  Make output:
  
  Error:(16, 51) java: incompatible types
  required: java.lang.String
  found:    java.lang.Object
  for (String string : aClass.getStrings()) {
  </code></pre>
  
  <p>Why this happens?</p>