#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)
пропускаю этот бросок, и это работает.