2015-05-12 3 views
4

Например, я увидел выражение Scala, как это:В Scala/Java, как проверить, где определен метод?

objX.methodY 

Там не кажется, нет способа, чтобы увидеть, где methodY пришел, он может пришел из:

(1) класс objX, давайте вызов это ClassX

(2) супер класс objX (ClassX), давайте назовем его SuperClassX

(3) класс ClassZ, ClassZ не имеет отношения к objX, но существует неявное преобразование от ClassX до ClassZ.

Возможно, существует три возможности для источника methodY, есть ли у кого-нибудь идеи о том, как определить, где определяется methodY?

Другими словами, в Scala, как проверить информацию о методе (особенно метод пришел из неявного преобразования) в Runtime?

+0

Я не знаю о scala; но в Java вы можете так думать - метод всегда «на» классе времени выполнения объекта; если этот класс не определяет метод, он «наследует» определение метода из суперкласса. – ZhongYu

+0

@ bayou.io Да, и Scala представила «неявное преобразование», что затрудняет поиск. –

+0

Я подозреваю, что неявное преобразование разрешено во время компиляции, а не во время выполнения. - Но опять же я не знаю scala. – ZhongYu

ответ

0

Существует возможность получить класс, который имеет метод, объявленный отражением. С вашим namings:

objX.getClass().getMethod("methodY").getDeclaringClass(); 
+0

Вы используете отражение Java, отражение Java ничего не знает о семантике Scala. Вероятно, вам придется использовать отражение Scala. –

0

Во время выполнения кода будет заменено чем-то вроде convertToY(objX).methodY, поэтому в этот момент нет никакой связи с objX, чтобы проверить, что это просто параметр функции. Что вы пытаетесь достичь?

Смежные вопросы