Как разыграть объект с помощью подстановочных знаков?

#java #generics

#Ява #дженерики

Вопрос:

Как привести тип с помощью подстановочных знаков?
Я попробовал с преобразованием типа силы и приведением. Это не могло сработать.
Вот определение типа:

 // type definition: class Resource {  xxxx }  abstract class ResourceWrapperlt;Tgt; {  abstract T getData(); }  class Apple extends Resource {  xxxx }  class AppleWrapper extends ResourceWrapperlt;Applegt; {  private Apple apple;   @Override  public Apple getData() {  return apple;  } }  enum ResourceTye {  APPLE("apple", AppleWrapper.class);  private String type;  private Classlt;? extends ResourceWraperlt;? extends Resourcegt;gt; clazz;    public Classlt;? extends ResourceWraperlt;? extends Resourcegt;gt; getWrapperClass() {  return clazz;  } }  // method: lt;Tgt; T getResource(String type, Classlt;Tgt; resourceType);  // caller: client.getResource("test", AppleWrapper.class)  

Мне нужно поиздеваться getResource над методом. Имитационный метод, подобный этому:

 AppleWrapper appleWrapper = mock(AppleWrapper .class);  when(client.getResource("test", resourceType.getWrapperClass))  .thenReturn(appleWrapper); // compile error  

Как разыграть appleWrapper в warpper с помощью подстановочных знаков?
Спасибо.

Комментарии:

1. Вы можете использовать (ResourceWrapperlt;Applegt;) для приведения. Я считаю, что правильный термин — «универсальные», а не «подстановочные знаки».

2. Ваше перечисление неполно. Что getWrapperClass() возвращается? Он должен вернуться AppleWrapper.class , чтобы соответствовать вашему звонку.

3. @roccobaroccoSC ошибка компиляции как mockito, затем возврат также является общим методом

4. Я обычно when(xxx).thenAnswer(invocation -gt; appleWrapper) пропускаю этот бросок, и это работает.