2016-12-11 2 views
0

я изучаю ksoap2-андроид проект, и я достиг запутанной точкуJava: типажи объект в другие несвязанный объекте

в коде ниже, как bodyOut типа org.ksoap2.serialization.SoapObject в настоящее время typecasted для org.kxml2.kdom.Node объекта? в то время как эти два не связаны каким-либо образом.

В приложении я заявил следующее:

SoapObject soapRequest = new SoapObject() 
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope() 
envelope.setOutputSoapObject(soapRequest); 

и в class SoapSerializationEnvelope {} мы имеем:

public void setOutputSoapObject(Object soapObject) { 
    this.bodyOut = soapObject;} 

public void writeBody(XmlSerializer writer) throws IOException { 
    if (encodingStyle != null) { 
     writer.attribute(env, "encodingStyle", encodingStyle); 
    } 
((Node) this.bodyOut).write(writer);} 

и у нас есть другой класс в другом пакете, который Node

public class Node {} 

Если типность зависит от корня class Object, как создается связь между этими двумя объектами?

+0

Попробуйте установить точку останова в этой инструкции. Посмотрите, какой тип объекта находится в 'bodyOut' и какие его суперклассы и реализованные интерфейсы. – Jerry101

+0

Убедитесь, что SoapObject расширяет узел напрямую или косвенно – GurV

+0

Они должны быть связаны каким-то образом, иначе код не будет компилироваться. Посмотри снова. – EJP

ответ

0

Я думаю, вы смотрите на исходный код writeBody в SoapEnvelope. Метод переопределяется в SoapSerializationEnvelope ... и , что версия не отличает объект bodyOut от Node.

Мой анализ основывается на следующих исходных ссылок:

(. При фиксации 82d9ac4c90bb818f9e8efe8049ca1978cd019d70)


Сказав, что реализация эти методы в SoapEnvelope похоже, что это не сработает ... если вы когда-либо создавали экземпляр и пытались использовать SoapEnvelope, а не SoapSerializationEnvelope.

+0

Doens'tr объясняет, как компилируется первый код. Если он не компилируется, не будет класса и, следовательно, не будет метода для второй реализации для расширения/переопределения, и он тоже не будет компилироваться. – EJP

+0

@EJP - 'bodyOut' объявлен как' Object' в 'SoapEnvelope' ... где этот метод' writeBody', который мы рассматриваем, объявлен. Поэтому '((Node) this.bodyOut)' компилируется. –

+0

@EJP - посмотрите код в контексте по ссылкам выше. –

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