Using a library with an abstract class `A` and interfaces `I` and `J`, I get the following warning message when I extend / implement the class / interfaces:

> 
> Missing type arguments for generic class J<T>.
> 
> 
> 

As a MWE, the classes are as follows (T and S are generic type parameters):

```
public abstract class A {}

public interface I<T extends A> {
    public <S extends T> void doStuff(J<? super S> param);
}

public interface J<T extends A> {
    public void doOtherStuff();
}

```

Here are my classes:

```
public class AExtended extends A {}

public class IImplemented implements I<AExtended> {
    @Override
    public void doStuff(J param) {}
}

```

Explicitly using the class `AExtended` as below does not properly implement doStuff() from `I`:

```
public class IImplemented implements I<AExtended> {
    @Override
    public void doStuff(J<AExtended> param) {}
}

```