如何创建String类副本?

Thu*_*shy 9 java string

我需要使用完全相同的方法创建一个类java.lang.String.

在Java中执行此操作的最佳方法是什么?

我知道我不能像现在这样扩展String类final.我不是在寻找需要复制源代码的解决方案java.lang.String.例如,假设我需要length()在我的自定义类中命名的函数MyString,它具有相应的'myLength()`方法.

实施的最佳方式是myLength()什么?

我不是在寻找不同的算法来找出一个字符串的长度,但重用Stringlength()方法.现在,一旦我MyString准备好了课程,我就可以在任何地方使用它进行自定义操作.

Pau*_*and 11

通过这里的各种答案,以及askers的更新和说明,似乎提问者想要的是一个外观,气味和听起来像一个字符串的类,但事实并非如此.

那是他们希望能够做到的:

MyString string = "String!!";
Run Code Online (Sandbox Code Playgroud)

java.lang.String是行不通的,因为它是一个final类,所以"String"编译器生成的每一个都是一个java.lang.String对象,因为它不是一个MyString对象,所以它们不能相互分配.

在弱类型语言中,你可以创建这样一个类,因为如果一个类看起来,闻起来像小鸭子一样,那么它就是一个鸭子.然而,Java是一种强类型的语言,如果它恰好来自雁鸭科的鸟类,它只是一只鸭子.


TBH*_*TBH 8

由于final类不能被子类化,因此创建一个内部具有 String实例并对此对象进行操作的新类.

public class MyString {
  private String s;

  public MyString( String s ) {
    setInternalString( s );
  }

  public int myLength() {
    return getInternalString().length();
  }

  private void setInternalString( String s ) {
    this.s = s;
  }

  private String getInternalString() {
    return this.s == null ? "" : this.s;
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 被称为代表团. (2认同)

Fab*_*eeg 5

从您的问题来看,您正在寻找的是简单的委托:

class MyString {

  String delegate; // The actual string you delegate to from your class

  public MyString(String delegate) {
    this.delegate = delegate; // Assign the string that backs your class
  }

  int length() {
    return delegate.length(); // Delegate the method call to the string
  }

  // other methods that delegate to the string field
}
Run Code Online (Sandbox Code Playgroud)