How to use an object of a class type from a generic class as a parameter? - combined and combined

I have two classes:

public abstract class MyAbstractSuperClass<A, B> {

    public MyAbstractSuperClass(Class<A> a, Class<B> b) {
        ...
    }

    ...
}

public class MyClass<A> extends MyAbstractSuperClass<A, MyOtherClass<A>> {

    public MyClass(Class<A> a) {
    super(a, MyOtherClass.class));
            ...
    }

    ...
}

Now you see that the subclass should call the constructor of the superclass. The following error appears on this line:

The constructor MySuperClass<A, MyOtherClass<A>>(Class<A>, Class<MyOtherClass>) is undefined
  • So how do I get an object of type Class<MyOtherClass<A>>?
  • And how to do this in a super constructor call, where I cannot execute much?

Thanks in advance.

+3
source share
3 answers

The constructor expects Class<MyOtherClass<A>>, not a Class<MyOtherClass>. The only way I can think of to satisfy the compiler is with an ugly series of throws:

@SuppressWarnings("unchecked") 
public MyClass(Class<A> a) {
   super(a, (Class<MyOtherClass<A>>)(Class<?>)MyOtherClass.class);
}

, , MyOtherClass , MyOtherClass<A>. , , , .

+1

MyOtherClass MyClass. , , - MyClass.

public class MyClass<A> extends MyAbstractSuperClass<A, MyOtherClass> {
    public MyClass(Class<A> a) {
       super(a, MyOtherClass.class);
    }
}

@SuppressWarnings("rawtypes"), .

0

MyClass:

public MyClass(Class<A> a, Class<MyOtherClass<A>> bClass) {
    super(a, bclass));
}

@Bert F: " ", -, . A . - MyClass .

-1

Source: https://habr.com/ru/post/1787060/


All Articles