我想在Java中的String类中添加一个方法AddDefaultNamespace(),这样我就可以输入"myString".AddDefaultNamespace()而不是DEFAULTNAMESPACE +"myString",以获得类似"MyDefaultNameSpace.myString"的内容.我不想添加另一个派生类(例如PrefixedString).
也许这种方法对你不好,但我个人讨厌使用"+".但是,无论如何,是否可以在Java中向String类添加新方法?
感谢致敬.
小智 24
嗯,实际上每个人都缺乏想象力.我需要编写自己的startsWith方法版本,因为我需要一个不区分大小写的方法.
class MyString{
public String str;
public MyString(String str){
this.str = str;
}
// Your methods.
}
Run Code Online (Sandbox Code Playgroud)
然后它很简单,你就像这样制作你的String:
MyString StringOne = new MyString("Stringy stuff");
Run Code Online (Sandbox Code Playgroud)
当你需要在String库中调用一个方法时,这样做很简单:
StringOne.str.equals("");
Run Code Online (Sandbox Code Playgroud)
或类似的东西,你有它...扩展String类.
Ale*_*ler 17
正如其他人都注意到的那样,你不允许扩展String(由于最终).但是,如果您感觉非常疯狂,可以修改String本身,将其放在jar中,并在-cbootclasspath/p:myString.jar之前添加bootclasspath以实际替换内置的String类.
由于我不会进入的原因,我实际上已经这样做了.您可能有兴趣知道即使您可以替换类,但是String在Java的每个方面的内在重要性意味着它在整个JVM启动过程中使用,并且一些更改将简单地破坏JVM.添加新方法或构造函数似乎没有问题.添加新字段非常冒险 - 特别是添加对象或数组似乎会破坏事情,尽管添加原始字段似乎有效.
这是不可能的,因为String是Java中的最终类.
您可以一直使用辅助方法为前缀添加前缀.如果您不喜欢它,您可以查看Groovy或Scala,JRuby或JPython都是与Java兼容的JVM语言,并允许这样的扩展.
是的!
根据您的要求(向字符串添加不同的命名空间而不使用派生类),您可以使用项目 Lombok 来执行此操作并在字符串上使用功能,如下所示:
String i = "This is my String";
i.numberOfCapitalCharacters(); // = 2
Run Code Online (Sandbox Code Playgroud)
使用 Gradle 和 IntelliJ idea 请按照以下步骤操作:
compileOnly 'org.projectlombok:lombok:1.16.20'
"Settings > Build > Compiler > Annotation Processors"
并启用注释处理使用扩展函数创建一个类并添加一个静态方法,如下所示:
public class Extension {
public static String appendSize(String i){
return i + " " + i.length();
}
}
Run Code Online (Sandbox Code Playgroud)注释您要在其中使用方法的类,如下所示:
import lombok.experimental.ExtensionMethod;
@ExtensionMethod({Extension.class})
public class Main {
public static void main(String[] args) {
String i = "This is a String!";
System.out.println(i.appendSize());
}
}
Run Code Online (Sandbox Code Playgroud)现在,您可以在任何类中的任何字符串上使用该方法.appendSize()
,只要您已对其进行注释以及上面示例的生成结果即可
这是一个字符串!
将会:
这是一个字符串!17 号
归档时间: |
|
查看次数: |
31277 次 |
最近记录: |