Я использую Apache Ignite, который на самом деле не является центральным в этом вопросе, но дает общие сведения. В этом контексте я создал класс, расширяющий CacheStoreAdapter
, который имеет метод со следующей сигнатурой:
@Override
public void write(Entry<? extends K, ? extends V> cacheEntry) throws CacheWriterException {
Я зарегистрировал этот класс в Ignite, чтобы он вызывал метод write()
всякий раз, когда я предоставляю ему данные для сохранения в кеше.
Что меня удивило, так это то, что в зависимости от того, как иначе настроен Ignite, следующий код ...
final V cacheObject = cacheEntry.getValue();
LOG.info("cacheObject = " + ToStringBuilder.reflectionToString(cacheObject));
... выводит следующее:
cacheObject = org.apache.ignite.internal.binary.BinaryObjectImpl@7c40ffef[ctx=org.apac
То есть cacheObject
, взятый из Entry<? extends K, ? extends V>
, не является экземпляром типа V
!
Я работал над этой проблемой (как я уже говорил, это происходит только в зависимости от того, как иначе настроен Ignite), но мне любопытно, как это даже делается в Java.
TL; DR Вопрос:
Как можно передать переменную методу, который не соответствует сигнатуре метода? Какая-то техника отражения? Есть ли общее / законное использование для этого?