Q:

Cannot convert from type T to type T?

A strange error here using static factory pattern. What am I missing?  Here is the code:
class subclass<T> extends immutablestruct<T>{
private immutablestruct f;
private T x;

    //constructor
<T> subclass(T y, immutablestruct<T> f ){
    this.x = y;  //this is there the error is
    this.f = f;
}

A:

Remove <T> from constructor declaration. Now you're declaring second generic parameter, while you can access old T value:
//constructor
subclass(T y, immutablestruct<T> f ){

