我想在Java中的String类中添加一个方法AddDefaultNamespace(),这样我就可以输入"myString".AddDefaultNamespace()而不是DEFAULTNAMESPACE +"myString",以获得类似"MyDefaultNameSpace.myString"的内容.我不想添加另一个派生类(例如PrefixedString).
也许这种方法对你不好,但我个人讨厌使用"+".但是,无论如何,是否可以在Java中向String类添加新方法?
感谢致敬.
String
是一个最终类,这意味着它无法扩展到您自己的实现.
嗯,实际上每个人都缺乏想象力.我需要编写自己的startsWith方法版本,因为我需要一个不区分大小写的方法.
class MyString{ public String str; public MyString(String str){ this.str = str; } // Your methods. }
然后它很简单,你就像这样制作你的String:
MyString StringOne = new MyString("Stringy stuff");
当你需要在String库中调用一个方法时,这样做很简单:
StringOne.str.equals("");
或类似的东西,你有它...扩展String类.
正如其他人都注意到的那样,你不允许扩展String(由于最终).但是,如果您感觉非常疯狂,可以修改String本身,将其放在jar中,并在-cbootclasspath/p:myString.jar之前添加bootclasspath以实际替换内置的String类.
由于我不会进入的原因,我实际上已经这样做了.您可能有兴趣知道即使您可以替换类,但是String在Java的每个方面的内在重要性意味着它在整个JVM启动过程中使用,并且一些更改将简单地破坏JVM.添加新方法或构造函数似乎没有问题.添加新字段非常冒险 - 特别是添加对象或数组似乎会破坏事情,尽管添加原始字段似乎有效.
这是不可能的,因为String是Java中的最终类.
您可以一直使用辅助方法为前缀添加前缀.如果您不喜欢它,您可以查看Groovy或Scala,JRuby或JPython都是与Java兼容的JVM语言,并允许这样的扩展.