对成员变量使用protected而不是private

时间:2015-01-15 11:47:29

标签: spring spring-batch

我总是遇到私有变量声明的问题。 例如FlatFileItemWrite。我想扩展这些类并覆盖'doRead'方法。这不起作用,因为一些使用的变量被声明为私有。这导致在自己的类中复制完整的代码以覆盖一个方法。

有时即使这样也行不通,因为该类扩展了另一个类,该类具有仅为同一个包声明可见的变量。然后你还需要复制这个类。

然后我将错过原版课程中新版本的更新。那么使用受保护的不是更好吗?

我只能使用私有而非受保护的几个原因进行成像。对于我自己的程序,这不是问题,我可以根据需要进行更改。但对于一个框架来说,这是一种痛苦。

亲切的问候

的Torsten

3 个答案:

答案 0 :(得分:2)

如果在Spring框架(或任何框架)中声明了某些内容private,则不会将其视为公共API的一部分。因此,你真的不应该直接使用它。这样做真的意味着你要求框架,并冒着无法无缝升级的风险。

作为Spring Batch的项目负责人,我有兴趣听取您要求您更改标记为私有的内容的FlatFileItemWriter的内容。

答案 1 :(得分:0)

如果框架背后的想法是覆盖或扩展这些方法,那么它们应该被编写为公开的。 (如果框架没有提供这些方法或属性作为公共框架,请小心,因为它可能依赖于它们以特定方式工作。这将是他们可以想到的私有的主要原因。他们不在的第二个原因是&# 39;在那个班级之外的事情。)

在某些情况下,您可能不需要复制整个类,但只是继承或扩展它可能就足够了。

答案 2 :(得分:0)

我还希望扩展某些ItemReaders / ItemWriters以支持i / o上的解密/加密。例如,我想扩展StaxEventItemReaderStaxEventItemReader以便从资源中读取加密流,但FragmentEventReader是私有的,因此我无法将其XMLEventReader的InputStream包装在解密器中。 我在使用FlatFileItemWriter时遇到了同样的问题。