java接口方法返回值本身

时间:2018-01-30 23:53:16

标签: java string interface implements

我是java的初学者。我想创建新的追加字符串方法

MyBuffer buf = new MyBuffer(1); buf.append("This");

会将字符串“This”添加到buf中,但

MyBuffer buf = new MyBuffer(1); buf.append("This"); buf.append("That");

会打印空间不足的错误。

我有2个java类和& 2个java接口如下:

public interface MyAppendable {
public abstract MyAppendable append(String word);
}

public interface MyFlushable {
public abstract void flush();
}

public class MyBuffer implements MyFlushable, MyAppendable {
String buffer = "";
int initialSize;
int bufferSize;
public MyBuffer(int initialSize) {
    this.initialSize = initialSize;
    this.bufferSize = initialSize;
}
public MyAppendable append(String word) {
    MyAppendable myappendable = new MyBuffer(bufferSize - 1);
    if(bufferSize > 0) {
        buffer = buffer + word;
        bufferSize--;
    } else {
        System.out.println("oops, not enough space, cannot add " + word + "into buffer");
    }
    return myappendable;
}

public void flush() {
    buffer = "";
    bufferSize = initialSize;
}

public String toString() {
    return buffer;
}

}

public class MyBufferDemo {
public static void main(String[] str) {
    MyBuffer buf = new MyBuffer(5);
    buf.append("This");
    buf.append(" ");
    buf.append("is");
    buf.append(" ");
    buf.append("MyBufferDemo");
    System.out.println(buf.toString());
    buf.flush();
    buf.append("A").append("B").append("C");
    System.out.println(buf.toString());
    buf.append("D").append("E").append("F");
    System.out.println(buf.toString());
}
}

但不是

This is MyBufferDemo
ABC
oops, not enough space, cannot add F into buffer
ABCDE

输出

This is MyBufferDemo
A
AD

我实际上在方法追加中感到困惑,其中返回值是它自己的接口。有可能吗?谢谢。

2 个答案:

答案 0 :(得分:0)

首先,在这段代码中你真的需要这些接口来完成你正在寻找的工作吗?我不这么认为。但是,您需要像在buf.append(“Hello”)之前的行中那样追加字符,这应该有效。

你不能使用myAppendable接口调用方法append,它没有显式声明,只是一个接口。

除此之外,我建议您不要在同一代码中使用接口和摘要方法。它们之间存在一些差异。

答案 1 :(得分:0)

只需检查添加的字符串是否适合,如果可以添加它并从缓冲区中减去字的总长度。目前你从缓冲区中减去1,但是如果这个单词是5个字符长,你可能想要从缓冲区中减去5,而不是像你当前那样从1中减去,

public MyAppendable append(String word) {
    if(bufferSize - word.length() >= 0) {
        buffer = buffer + word;
        bufferSize -= word.length();
        //create your copy...
        MyAppendable myappendable = new MyBuffer(this.initialSize);//i believe this should be the size of the buffer and not the initial size variable
        myappendable.buffer = this.buffer;
        myappendable.initialSize = this.initialSize;
        myappendable.bufferSize = this.bufferSize;
        return myappendable;
    } else {
        System.out.println("oops, not enough space, cannot add " + word + "into buffer");
        return this;
    }
}

最后你永远不会使用返回的对象,所以我不确定你为什么在append方法中返回一个。