Why in ViewHolder pattern should the ViewHolder class be static?

android, android-viewholder, java

Solution

One benefit of using static inner class, is that the inner class can be accessed from static methods, without having an instance of the outer class.

If the inner class non-static:

class MyOuter {
    private int x = 7;
    public void makeInner() {
        MyInner in = new MyInner();
        in.seeOuter();
    }
    class MyInner {
        public void seeOuter() {
            System.out.println("Outer x is " + x);
        }
    }
}

public static void main(String[] args) {
    MyOuter mo = new MyOuter();
    MyOuter.MyInner inner = mo.new MyInner();
    inner.seeOuter();
}

If the inner class is static:

class BigOuter {
    static class Nest {void go() { System.out.println("hi"); } }
}

class Broom {
    static class B2 {void goB2() { System.out.println("hi 2"); } }
    public static void main(String[] args) {
        BigOuter.Nest n = new BigOuter.Nest();
        n.go();
        B2 b2 = new B2();
        b2.goB2();
    }
}

Problem

I am just trying to have a better understanding of the following pattern I regularly use to optimize `ListView` My readings only pointed me to the fact that a static inner class is treated as top level class. What is the benefit of such a thing compared to a member class (non static)? ``` @Override public View getView(int position, View convertView, ViewGroup parent) { Comment comment = getItem(position); ViewHolder holder; if (convertView == null){ holder = new ViewHolder(); convertView = LayoutInflater.from(context).inflate(R.layout.mylayout, null); holder.nickname = (TextView) ((ViewGroup) convertView).findViewById(R.id.nickname); convertView.setTag(holder); }else{ holder = (ViewHolder) convertView.getTag(); } holder.nickname.setText(comment.getMember_nickname()); CharSequence return convertView; } public static class ViewHolder{ TextView nickname; } ```

Original source