How can I apply the <T> class to what acts like the <T extends Foo> class at runtime?

I have a class that looks like this:

class FooClassAnalyser<T extends Foo> extends ClassAnalyser<T>

(where ClassAnalyseris the abstract base class for a number of specific implementations, and FooClassAnalyseris the specific implementation, specialized for the case when it Tcontinues Foo). It has a constructor that looks like this:

FooClassAnalyser(Class<T> classToAnalyse)

In another class, I have a static factory method for ClassAnalyserthat calls the appropriate constructor depending on the type classToAnalyse:

static <U> ClassAnalyser<U> constructClassAnalyser(Class<U> classToAnalyse)

I want to check if there is U instanceof Foo, then build FooClassAnalyserand return it, if any.

Java. , U . , classToAnalyse , , U instanceof Foo :

if (Foo.class.isAssignableFrom(classToAnalyse))

, instanceof " " Java-. , classToAnalyse FooClassAnalyser , Java , classToAnalyse Class<U extends Foo>.

, , , classToAnalyse a Class<? extends Foo> ( , Java , ). , , new FooClassAnalyser FooClassAnalyser<?> . , , , ClassAnalyser<U>, Java , classToAnalyse , Class - (, , Class<U>); , , Java, - FooClassAnalyser<?>, , FooClassAnalyser<U>, , , . , , .

, , (, Class<U extends Foo> ​​, Java ). , U ; , , Class<U> .

?

+4
1

, instanceof " " Java. , classToAnalyse FooClassAnalyser , Java , classToAnalyse Class<U extends Foo>.

, Class<U> constructClassAnalyser. , ; , U constructClassAnalyser Class<U>.

static <U> ClassAnalyser<U> constructClassAnalyser(U objectToAnalyse)

, objectToAnalyse#getClass; instanceof, , U extends Foo, objectToAnalyse instanceof Foo true, .

0

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


All Articles