Я должен создать класс Trace, который инкапсулирует переменную типа T и историю ее изменений (в виде списка). Объект Trace может быть создан с использованием статического метода, передавая его значение в качестве первого аргумента и его (необязательную) историю в качестве остальных аргументов. История всегда указывается с самым старым изменением.
Это то, что я реализовал:
import java.util.*;
@SuppressWarnings("unchecked")
class Trace<T>{
ArrayList<T> objects;
//int maxObjects;
public Trace(T... words){
this.objects = new ArrayList<T>();
for (int i = 0; i < words.length; i++){
objects.add(words[i]);
}
}
public static <T> Trace<T> of(T... words){
return new Trace(words);
}
public T get(){
return this.objects.get(0);
}
public List<T> history(){
return this.objects;
}
public String toString(){
String s = "[";
for (int i = 0; i < this.objects.size() - 1; i++){
String line = this.objects.get(i) + ", ";
s += line;
}
s += this.objects.get(objects.size()-1) + "]";
return s;
}
}
Однако, когда я запустил свою программу на Jshell, я должен получить
jshell> Trace.of("hello").get()
$.. ==> "hello"
jshell> Trace.of("hello", "h", "he", "hel", "hell").get()
$.. ==> "hello"
jshell> Trace.of("hello", "h", "he", "hel", "hell").history()
$.. ==> [h, he, hel, hell, hello]
но вместо этого я получаю:
jshell> Trace.of("hello").get()
$.. ==> "hello"
jshell> Trace.of("hello", "h", "he", "hel", "hell").get()
$.. ==> "hello"
jshell> Trace.of("hello", "h", "he", "hel", "hell").history()
$.. ==> [hello, h, he, hel, hell]
Как мне изменить метод history () таким образом, чтобы он учитывал ранее добавленный hello и возвращает hello"сначала в списке, а затем ч, он, хель, ад?