Получить имя родового типа во время компиляции для аннотации [duplicate]

вы также можете использовать диапазоны, используя:

b = df[(df['a'] > 1) & (df['a'] < 5)]
2
задан AyCe 18 August 2013 в 14:09
поделиться

1 ответ

Поскольку типичные типы подвергаются стиранию, вам нужно будет указать java.lang.Class где-нибудь в коде. Один из способов - передать его универсальному методу:

ObjType obj = /*...*/;
handleObj(obj, SubObjType.class);

// ...

private <T extends ObjType> void handleObj(ObjType obj,
                                           ObjectHandle<T> handle,
                                           Class<T> handleableObjClass) {
    if (handleableObjClass.isInstance(obj)) {
        handle.setObj(handleableObjClass.cast(obj));
    }
}

Если вы не знаете, какие подклассы ObjType вы ищете, вам нужно будет добавить повторно свойство Class для ObjectHandle, аналогичное как java.util.EnumSet и java.util.EnumMap делают это:

class ObjectHandle<T extends ObjType> {

    T obj;

    private final Class<T> objectClass;

    ObjectHandle(Class<T> cls) {
        objectClass = Objects.requireNonNull(cls);
    }

    Class<T> getObjectClass() {
        return objectClass;
    }

    void setObj(T o) {
        obj = o;
    }
}

// ...
ObjectHandle<SubObjType> handle = new ObjectHandle<SubObjType>();
// ...

ObjectType obj = /*...*/;
if (handle.getObjectClass().isInstance(obj)) {
    handle.setObj(handle.getObjectClass().cast(obj));
}
2
ответ дан VGR 22 August 2018 в 18:13
поделиться
  • 1
    Хм, вот как я бы это сделал. К сожалению, нет крутой компиляции. Это не отвечает на то, что я искал, но это потому, что, похоже, на это нет ответа. Во всяком случае, спасибо за это. :) – AyCe 19 August 2013 в 00:12
Другие вопросы по тегам:

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