在对象上应用新函数

时间:2011-03-21 17:34:19

标签: java

我有一个字符串,我想在一个函数中同时做一堆事情(它将是一堆替换)。如果字符串被调用string.color()并且我所做的函数是string,我想对color()的程度做一些事情。我该如何申报color()?我应该在扩展String或接口的类中进行吗?我应该放弃并改为color(string)吗?

6 个答案:

答案 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()方法的结果。