Как рассчитать цель метода моста - PullRequest
2 голосов
/ 04 февраля 2010

Дженерики привносят много хорошего в Java, но они также означают проблемы из-за введения методов моста, которые означают, что не легко найти метод с именем и целью, потому что методы стирания и моста означают, что клиенты фактически используют мостчем цель.

Типы возврата из методов были опущены, потому что они не важны для этой очереди ...

class Super{
}

class Sub extends Super{
}

interface Interface<T extends Super>{
   method( T t ); // erased -> method( Super super );
}

interface Interface2 extends Interface<T extends Sub>{
   method2( T t ); // erased -> method2( Sub sub );
}

class Concrete implements Interface2{
   method( Sub sub );     // erased to method( Super super);
   method2( Sub sub );
}

как я могу программно определить, что Concrete.method (Super) заканчиваетсявызывать Concrete.method (Sub)?Я хотел бы избежать вычислений, основанных на параметризованных типах, и что нет, поскольку это быстро усложняется ...

Я смотрел на Springs BridgeMethodResolver, но он довольно сложный и делает много вещей, конечно, есть более простой способ.Возможно, нет ..

Ответы [ 2 ]

0 голосов
/ 08 февраля 2010

I столкнулся с связанной проблемой - мне нужно было извлечь аннотации «оригинального» метода, и мне было очень трудно найти метод из-за мостов (у которых нет аннотаций) , В итоге я отправил запрос на улучшение , который был принят. В вашем случае я не знаю, для чего вам нужен метод, поэтому, к сожалению, запрос (как он сформулирован сейчас) может вам не помочь.

0 голосов
/ 04 февраля 2010

Мне пришло в голову следующее:

  • найти все возможные варианты аргументов метода (с использованием .getSuperclass()), причем последний из них будет (Object, Object, ...)
  • .и найти тот, который не Method.isBridge();

Но это опять-таки слишком много работы, и она может не сработать :).Я бы предложил сделать просто:

Method target = new BridgeMethodResolver().findBridgedMethod(bridgedMethod);

Независимо от сложности, она скрыта от вас.

Если вы не хотите зависеть от весны, просто скопируйте и вставьтекод этого класса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...