我有一个字符串,我想在一个函数中同时做一堆事情(它将是一堆替换)。如果字符串被调用string.color()
并且我所做的函数是string
,我想对color()
的程度做一些事情。我该如何申报color()
?我应该在扩展String
或接口的类中进行吗?我应该放弃并改为color(string)
吗?
答案 0 :(得分:3)
只需public String color(String) { ... }
。
由于您无法更改String
(即它们是不可变的),您最终将从任一方法返回新的String
。不妨采取更直接的方法,直到情况证明使用更复杂的东西如继承或组合。
答案 1 :(得分:1)
只是一个注释 - 您的任何建议(扩展String
类或接口)都不会让您避免color(String)
:
String
是一个最终类,因此您无法使用自己的操作定义它的子类。String
实现它们 - 所以接口上的方法需要将String作为参数,然后你回到{{ 1}}再次。答案 2 :(得分:1)
考虑组合(例如String
的简单包装器):
public class EnhancedString {
private String str;
public EnhancedString(final String str) {
this.str = str;
}
public EnhancedString color() {
// do some stuff and return the result
return this;
}
public EnhancedString anotherReplacement() {
// more stuff
return this;
}
}
这种方法有什么好处,它允许你以后链接方法调用(jQuery风格):
EnhancedString estr = new EnhancedString("testing");
estr.color().anotherReplacement();
答案 3 :(得分:0)
String是java中的最后一个类,因此您不能将方法扩展并添加到String类中。您应该执行color(String)
。
如果您在String中处理大量替换,请考虑使用StringBuilder。
答案 4 :(得分:0)
String final ,因此您无法扩展它。
只做颜色(字符串)。
答案 5 :(得分:0)
String是final和immutable所以你将无法扩展它并创建一个具有新方法的子类,例如color。
一种方法是创建一个定义了方法颜色的StringUtil类,即
public static String color(String someString) {
// Your logic that creates a new "colored" String and returns this new String
}
然后你可以打电话:
String coloredString = StringUtil.color(someString);
顺便说一句,每次对String执行任何操作时,都会返回一个新的String对象,因此如果在颜色的String上执行许多操作(如串联),则使用StringBuilder等效率更高。方法,您只需返回StringBuilder的toString()方法的结果。