Java - definition of a member that extends class A and implements interface B

I have a variable that must meet two conditions, and I want to set them in the definition

I know that I can define any condition with a separate variable, as in any of these examples

private Class<? extends A> variable; //or
private A variable; //or
private Class<? extends B> variable; //or
private B variable;

But is there a way for a variable to meet both conditions?

I was hoping for something like this

private Class<? extends A implements B> variable;

But I can’t find a way to do this without typecasting, when I need to call it or save several copies of it

+2
source share
2 answers

You can declare type parameters with several restrictions, for example:

public static <T extends A & B> void test(Class<T> clazz)

:

private Class<? extends A & B> variable;  // doesn't work

abstract class C, A B, .

abstract class C extends A implements B {}

:

private Class<? extends C> variable;
+2

Java , A&B, . A&B .

public class ValueAB<T extends A&B>
{
    public final T v;

    // constructor ...
}

public class ClassAB<T extends A&B>
{
    public final Class<T> clazz;

    // constructor ...
}

A&B, Class<? extends A&B> ValueAB, ClassAB

    ClassAB<?> clazz = new ClassAB<>(Foo.class);   

    ValueAB<?> value = new ValueAB<>(clazz.c.newInstance());

    value.v.methodOfA();
    value.v.methodOfB();

As Bs.


A ; B . , , A&B1, A&B2, ... .

public class ValueA<T extends A>
{
    public final T v;
    ...
}


public class ClassA<T extends A>
{
    public final Class<T> c;
    ...
}

---

    ClassA<? extends B> clazz = new ClassA<>(Foo.class);

    ValueA<? extends B> value = new ValueA<>(clazz.c.newInstance());

, , .


A B ; A B.

public class Value<T extends S, S>
{
    public final T v;
    ...
}


public class Clazz<T extends S, S>
{
    public final Class<T> c;
    ...
}

---

    Clazz<? extends A, B> clazz = new Clazz<>(Foo.class);

    Value<? extends A, B> value = new Value<>(clazz.c.newInstance());

, , .

+1

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


All Articles