Строка Java к типу обобщения - PullRequest
0 голосов
/ 13 марта 2019

У меня есть определенный класс

class MyTransformer<V, M extends SomeBaseM> extends Transformer<V,M> {
  ...
}

Во всех случаях, кроме одного, я бы это описал

MyTransformer<Foo,Bar> t = new MyTransformer(...);

Существует один случай, когда я получаю универсальные типы вместо класса:

void annoyingCaller( Class<? extends V> vClass, Class<? extends SomeBaseM> M, ... ) {
  MyTransformer<?,?> t = new MyTransformer(...);
}

Могу ли я что-нибудь сделать, чтобы заполнить этот универсальный тип (возможно, с помощью отражения?)

Ответы [ 2 ]

1 голос
/ 13 марта 2019

Это у вас работает?

void annoyingCaller( Class<? extends V> vClass, Class<? extends SomeBaseM> M, ... ) {
  MyTransformer<Class<? super V>, Class<? super SomeBaseM>> t 
         = new MyTransformer<>(...);
}
0 голосов
/ 13 марта 2019

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

<V, M extends SomeBaseM> MyTransformer<V, M> annoyingCaller(
        Class<? extends V> v,
        Class<? extends M> m) {
    return new MyTransformer<V, M>();
}

Если вместо этого вам не нужно возвращать экземпляр, но вам просто нужен его как внутренний процесс, это нормально.

void <V, M extends SomeBaseM> annoyingCaller(
        Class<? extends V> v,
        Class<? extends M> m) {
    final MyTransformer<V, M> transformer = new MyTransformer<>();
    transformer.method();
    ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...