Вопрос по java – Аргумент метода расширяет интерфейс класса.

55

У меня есть следующий класс и интерфейс:

public class BasicObject{...}
public interface CodeObject{...}

Я хочу создать метод, в котором аргумент должен иметь тип BasicObject и реализует CodeObject. Я попробовал следующий код, но он не гарантирует, что clazz будет классом, реализующим CodeObject.

myMethod(Class<? extends BasicObject> clazz){...}

Я хочу сделать что-то подобное, но это не компилируется:

myMethod(Class<? extends BasicObject implements CodeObject> clazz){...}
Error: User Rate Limit Exceededstackoverflow.com/questions/745756/… yiannis

Ваш Ответ

4   ответа
8

public abstract class BasicCodeObject 
    extends BasicObject 
    implements CodeObject {...}

public <T extends BasicCodeObject> void myMethod(Class<T> clazz) {...}
80

BasicObjectCodeObject

public <T extends BasicObject & CodeObject> void myMethod(Class<T> clazz)

public <T extends BasicObject, CodeObject> void myMethod(Class<T> clazz)

This is technically valid syntax, but CodeObject is unused; the method will accept any classes that extends BasicObject, no matter whether they extend/implement CodeObject.

public void myMethod(Class<? extends BasicObject & CodeObject> clazz)
public void myMethod(Class<? extends BasicObject, CodeObject> clazz)

These are just wrong syntax according to Java.

Error: User Rate Limit ExceededBasicObjectError: User Rate Limit Exceeded
Error: User Rate Limit Exceededpublic <T extends BasicObject & CodeObject> void myMethod(T clazz)
Error: User Rate Limit Exceeded
1

):

myMethod(Class<? extends BasicObject> clazz)
{
    if (!clazz.isInstance(CodeObject))
    {
        (indicate that the call was incorrect)
    }
    ...
}
Error: User Rate Limit Exceeded Gab
Error: User Rate Limit Exceeded
5

class typeBasicObjectCodeObjectclass object

Solution 1:

Class

public <R extends BasicObject & CodeObject> void myMethod(Class<R> clazz)

class

public <R extends BasicObject & CodeObject> void myMethod(R clazz)

Solution 2:

public abstract class TargetClassType extends BasicObject implements CodeObject {

}

public void myMethod(Class<TargetClassType> clazz)

public void myMethod(TargetClassType clazz)

Похожие вопросы