例如,java.io.File 只是一个具体的类。我的替代品支持解析 Windows 快捷方式。我需要预处理构造函数参数以解析可能的 .lnk 文件,因为无法访问在抽象路径上执行规范化/规范化/解析的 FileSystem 对象。预处理的需要排除了纯子类化 - 在调用 super(...) 之前不能进行预处理,并且 File 是不可变的。所以我扩展了 File 并使用了一个委托,覆盖了 File 的所有构造函数和方法(在所有构造函数中调用 super(""))。
这很好用,但显然并不理想——如果 File 发生变化,我将不会覆盖任何新方法或构造函数,这将暴露底层的空抽象路径名。我错过了一些明显的东西吗?似乎应该有一个更简单/更好的方法。