扩展java.lang.String

java.lang.String被声明为final,但有没有合法的机制或以其他方式扩展它并替换equals(String other)方法?

不,绝对不是。 如果您想要一些“其他”类型的字符串,请创建另一个可能包含字符串的类型:

 public final class OtherString { private final String underlyingString; public OtherString(String underlyingString) { this.underlyingString = underlyingString; } // Override equals however you want here } 

我猜你最接近的是制作一些实现CharSequence的类。 大多数JDK字符串操作方法都接受CharSequence。 例如StringBuilder 。 结合toString()的良好实现,String和valueOf()的各种方法,你可以非常接近自然的替代品。

您不能扩展标记为final的类。 您可以使用合成将String对象放入其中,也可以手动滚动自己的版本。 这可以通过字符数组和创建String类的其他魔法来实现。

不可能直接inheritanceString类,因为它是最终的。 包装类java.lang.Integer,java.lang.Float等也是最终的。