我正在学习序列化并遇到了这个函数(在Externalization中)。
public void writeExternal(ObjectOutput oi) throws IOException, ClassNotFoundException
我知道该方法创建了一个名为oi的ObjectOutput类型的对象,用于将实例变量写入对象。当我想要了解更多关于ObjectOutput类的内容时,我很惊讶ObjectOutput是一个接口!我认为Java不允许创建类型接口的对象。如果我理解了错误,请告诉我为什么会这样或纠正我。
答案 0 :(得分:0)
首先,正如' Add reference to Microsoft XML v6.0 library
Public Const XML As String = _
"<response>" & _
"<lst name='responseHeader'>" & _
"<int name='status'>0</int>" & _
"<int name='QTime'>0</int>" & _
"<lst name='params'>" & _
"<str name='q'>*:*</str>" & _
"<str name='indent'>true</str>" & _
"<str name='wt'>xml</str>" & _
"</lst>" & _
"</lst>" & _
"<result name='response' numFound='5429' start='0'>" & _
"<doc>" & _
"<int name='idProductCategory'>2</int>" & _
"<str name='categoryname'>Live Animals</str>" & _
"<int name='categoryLevel'>2</int>" & _
"<str name='bestOfferEnabled'>false</str>" & _
"<str name='leafCategory'>true</str>" & _
"<int name='parentCategoryId'>1</int>" & _
"<long name='_version_'>1535190804282212352</long>" & _
"</doc>" & _
"</result>" & _
"</response>"
Sub test()
Dim xmlDocument As MSXML2.DOMDocument60
Set xmlDocument = New DOMDocument60
If Not xmlDocument.LoadXML(XML) Then
Err.Raise xmlDocument.parseError.ErrorCode, , xmlDocument.parseError.reason
End If
Dim nodeIdProductCategory As IXMLDOMNode
Set nodeIdProductCategory = xmlDocument.SelectSingleNode("/response/result/doc/int[@name='idProductCategory']")
If Not nodeIdProductCategory Is Nothing Then
MsgBox nodeIdProductCategory.text
Else
MsgBox "Node witd name 'idProductCategory' was not found."
End If
End Sub
在评论中指出的那样,trappski
并未创建任何内容。 writeExternal
是通过调用ObjectOutput
的任何代码传递给它的参数。
接口的诀窍是他们是一个&#34;合同&#34;。您无法从接口创建对象,但您可以创建实现该接口的类,然后从这些类创建对象。然后,您可以使用那些在预期接口的任何地方实现接口的类的对象。
在这种情况下,如果你有一个writeExternal
类实现BigObjectOutput
,那么:
ObjectOutput
然后您可以像这样创建class BigObjectOutput implements ObjectOutput {
// code...
}
类型的对象:
BigObjectOutput
并将其传递给您的方法,因为BigObjectOutput bigObject = new BigObjectOutput;
实现了BigObjectOutput
:
ObjectOutput
你为什么要这样做?这样您就可以传入任何类型实现writeExternal(bigObject);
的对象:
ObjectOutput
因此,如果class LittleObjectOutput implements ObjectOutput {
// code...
}
LittleObjectOutput littleObject = new LittleObjectOutput();
writeOutput(littleObject);
接受任何类型实现writeOutput
接口的对象,那么它OutputObject
会更有用。
答案 1 :(得分:0)
感谢你的解释@Emma。你的意思是说类LittleObjectOutput扩展BigObjectOutput实现ObjectOutput { //代码...... }
LittleObjectOutput littleObject = new LittleObjectOutput();
的writeExternal(littleObject);