以下代码适用于javax.activation.DataHandler.getDataContentHandler,1.41,07/05/14。
如果在调用方法时dataContentHandler成员变量为null,则它由[1]的'if'子句设置(这是在我的程序中发生的情况)。
然后,它立即在[2]的if子句中被覆盖。
我是否缺少某些东西,还是不太可能成为预期的行为?
private synchronized DataContentHandler getDataContentHandler() {
// make sure the factory didn't change
if (factory != oldFactory) {
oldFactory = factory;
factoryDCH = null;
dataContentHandler = null;
transferFlavors = emptyFlavors;
}
if (dataContentHandler != null)
return dataContentHandler;
String simpleMT = getBaseType();
if (factoryDCH == null && factory != null)
factoryDCH = factory.createDataContentHandler(simpleMT);
if (factoryDCH != null)
dataContentHandler = factoryDCH;
if (dataContentHandler == null) { // [1]
if (dataSource != null)
dataContentHandler = getCommandMap().
createDataContentHandler(simpleMT, dataSource);
else
dataContentHandler = getCommandMap().
createDataContentHandler(simpleMT);
}
// getDataContentHandler always uses these 'wrapper' handlers
// to make sure it returns SOMETHING meaningful...
if (dataSource != null) // [2]
dataContentHandler = new DataSourceDataContentHandler(
dataContentHandler,
dataSource);
else
dataContentHandler = new ObjectDataContentHandler(
dataContentHandler,
object,
objectMimeType);
return dataContentHandler;
}
一世
最佳答案
我是否缺少某些东西,还是不太可能成为预期的行为?
看起来这是每个评论的预期行为:
// getDataContentHandler始终使用这些“包装器”处理程序
//以确保它返回有意义的东西...
如果仔细查看代码,会将“ dataContentHandler”作为参数传递给“ new DataSourceDataContentHandler”和“ new ObjectDataContentHandler”。那就是评论中提到的“包装”。