我一直在创建一个Arraylist
作为公共课,因为我是如何被教导的。当我在另一个文档中引用它时,Arraylist
的功能包含变量,例如:get()
,remove()
,size()
等。意味着我必须在公共场所创建它每次上课。我是否每次都要为每个代码添加代码,因为我正在尝试创建size()
,但需要一些帮助。
或者有没有办法使Arraylist
功能正常,不需要每次都添加行。代码应该有助于解释我的意思:
import java.util.ArrayList;
public class Question1 {
private ArrayList<Question1Entry> entries;
public Question1() {
entries = new ArrayList<Question1Entry>();
}
public void add( String name, String studentNumber, String courseName, String courseID, String houseNumber, String streetName, String town, String postcode ) {
entries.add(new Question1Entry(name, studentNumber, courseName, courseID, houseNumber, streetName, town, postcode ));
}
public void remove (int index ) {
entries.remove(index);
}
public Question1Entry get(int index) {
return entries.get(index);
}
//The variable I need help creating
public Question1Entry size(int index) {
return entries.size(index);
}
public String toString( ) {
StringBuffer temp = new StringBuffer();
for (int i = 0; i < entries.size(); ++i) {
temp.append( entries.get(i).toString() + "\n" );
}
return temp.toString();
}
}
有没有办法绕过添加get()
,size()
remove()
等等?
谢谢:)
答案 0 :(得分:0)
到目前为止您使用的内容称为 delegation 。您可以继续重新创建每个方法并将其委派给您的委托对象(entries
)。许多IDE都具有快速创建所需委派方法的功能。
Intellij:来源→生成→ 委派方法
Eclipse:代码→生成代理方法
我还建议在inheritance的示例中使用Mr. Polywhirl(尽管如果这个概念对您来说很新,您可以在没有泛型的情况下执行此操作)。最明显的好处是,您只需要定义一次方法,但真正的好处来自于将代码推广到任何问题(不只是Question1
)。
答案 1 :(得分:0)
如果您使用泛型,则可以重复使用通用问题类以获得更多问题。
您的结构如下:
public class Question1Entry implements GenericEntry {
public Question1Entry(String name, String studentNumber, String courseName, String courseID, String houseNumber,
String streetName, String town, String postcode) {
}
}
public class Question1 extends GenericQuestion<Question1Entry> {
public void add(String name, String studentNumber, String courseName, String courseID, String houseNumber, String streetName, String town, String postcode) {
add(new Question1Entry(name, studentNumber, courseName, courseID, houseNumber, streetName, town, postcode));
}
@Override
public void add(Question1Entry entry) {
getEntries().add(entry);
}
}
public interface GenericEntry {
}
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
public abstract class GenericQuestion <T extends GenericEntry> {
private List<T> entries;
public List<T> getEntries() { return entries; }
public void setEntries(List<T> entries) { this.entries = entries; }
public GenericQuestion() {
entries = new ArrayList<T>();
}
// Could define it here, but we'll leave it for implementation.
public abstract void add(Question1Entry entry);
public void remove(int index) {
entries.remove(index);
}
public T get(int index) {
return entries.get(index);
}
public int size() {
return entries.size();
}
public String toString() {
return entries.stream().map(T::toString).collect(Collectors.joining(System.lineSeparator()));
}
}