【发布时间】:2018-10-27 09:29:55
【问题描述】:
我需要创建自己的 String 类,称为 MyString,而不使用默认的 String 类/向量 API。我必须处理一些必需的方法,它们的返回类型是预先确定的。只要不使用String,我可以添加其他方法。
预期用途是:
(在 main)System.out.println(str.toLowerCase()) - 返回 str 的小写
当我想使用返回类型为MyString 的toLowerCase() 方法时,我无法返回对象内容而只能返回地址。
通常,这个问题需要修改toString(),但是由于这个方法默认需要返回类型为String,所以我不能使用修改toString()进行赋值。
作业应该不那么难,不需要复杂的扩展。我的构造函数可能是问题所在,但我无法指定是哪一部分。
代码
public class MyString {
private char value[];
MyString(char[] arr){
this.value = Arrays.copyOf(arr, arr.length);
}
...
MyString toLowerCase() { // can't change return type
for (int i =0; i<value.length; i++) {
if ((int)value[i] > 64 && (int)value[i] < 91) {
value[i] = (char) (value[i]+32);
}
}
return this; // this returns address, and I can't override toString
}
【问题讨论】:
-
与内部 Java 类交互的唯一方法是通过指定的 API -
toString是该 API 的一部分。 没有其他方式可以描述您希望如何将您的课程打印为String。您可以考虑添加一个PrintWriter装饰器 - 一个MyStringPrintWriter,它使用某种方法获取MyString并将其输出到charbychar。 -
@aka-one 为什么?
MyString可以是可变的。String不可变不会影响自定义实现。 -
@aka-one 不确定我理解你的意思。类的可变性或不变性会影响它的共享方式。这不影响需要实现哪些方法,只影响它们的如何实现。如果你想编写自己的字符串类,你将不得不重新实现所有方法。
标签: java string overriding tostring