Java 什么';readInternal和read-in AbstractHttpMessageConverter之间的区别是什么?

Java 什么';readInternal和read-in AbstractHttpMessageConverter之间的区别是什么?,java,spring,Java,Spring,例如title,我不明白为什么这个类中需要两个方法 : /** *这个实现简单地委托给{@link#readInternal(类,HttpInputMessage)}。 *但是,未来的实现可能会添加一些默认行为。 */ @凌驾 公共最终T读取(类注意,read是final。扩展类的任何人都不能覆盖它 readInternal是abstract,因此每个扩展类的人都必须重写它(除非他们的类也是抽象的) 这表面上是不必要的;但它为AbstractHttpMessageConverter的维护者提供了

例如title,我不明白为什么这个类中需要两个方法

:

/**
*这个实现简单地委托给{@link#readInternal(类,HttpInputMessage)}。
*但是,未来的实现可能会添加一些默认行为。
*/
@凌驾

公共最终T读取(类注意,
read
final
。扩展类的任何人都不能覆盖它

readInternal
abstract
,因此每个扩展类的人都必须重写它(除非他们的类也是抽象的)

这表面上是不必要的;但它为
AbstractHttpMessageConverter
的维护者提供了改变所有子类行为的机会——例如,在
readInternal
之前或之后调用某个方法,而无需将调用before/after的负担传递给扩展类的人


它基本上是类设计的未来证明。或者,正如上面所指出的,它可能是旧代码的残余,而以前在方法中有其他东西。

1。)请不要发布代码的图像,而是实际的代码。这使得搜索此方法变得更容易。2.)可能是向后兼容。这些方法在过去可能做了一些不同的事情,但现在做的是相同的事情(或者在以后添加了一个)。为了保持向后兼容性,旧方法只是委托给新方法,这样代码仍然可以使用它。不过它并没有被弃用,所以可能只是为了方便起见。下次我会注意的,谢谢你的支持reminding@sibo.wang好吧,不要删除问题中的图像,而替换为零!就目前而言,这个问题毫无意义。把你需要知道的一切都写进问题中,作为文本。
/**
 * This implementation simple delegates to {@link #readInternal(Class, HttpInputMessage)}.
 * Future implementations might add some default behavior, however.
 */
@Override
public final T read(Class<? extends T> clazz, HttpInputMessage inputMessage) throws IOException {
    return readInternal(clazz, inputMessage);
}

// ...

/**
 * Abstract template method that reads the actual object. Invoked from {@link #read}.
 * @param clazz the type of object to return
 * @param inputMessage the HTTP input message to read from
 * @return the converted object
 * @throws IOException in case of I/O errors
 * @throws HttpMessageNotReadableException in case of conversion errors
 */
protected abstract T readInternal(Class<? extends T> clazz, HttpInputMessage inputMessage)
        throws IOException, HttpMessageNotReadableException;