在类中委派ArrayList

时间:2018-04-12 12:57:46

标签: java arraylist

我一直在创建一个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()等等?

谢谢:)

2 个答案:

答案 0 :(得分:0)

到目前为止您使用的内容称为 delegation 。您可以继续重新创建每个方法并将其委派给您的委托对象(entries)。许多IDE都具有快速创建所需委派方法的功能。

  • Intellij来源生成委派方法

  • Eclipse:代码生成代理方法

我还建议在inheritance的示例中使用Mr. Polywhirl(尽管如果这个概念对您来说很新,您可以在没有泛型的情况下执行此操作)。最明显的好处是,您只需要定义一次方法,但真正的好处来自于将代码推广到任何问题(不只是Question1)。

答案 1 :(得分:0)

如果您使用泛型,则可以重复使用通用问题类以获得更多问题。

您的结构如下:

Question1Entry

public class Question1Entry implements GenericEntry {
    public Question1Entry(String name, String studentNumber, String courseName, String courseID, String houseNumber,
        String streetName, String town, String postcode) {
    }
}

问题1

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);
    }
}

GenericEntry

public interface GenericEntry {

}

GenericQuestion

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()));
    }
}