checkstyle警告"不允许声明变量,返回值或'ArrayList'类型的参数." 意思?

Edw*_*ard 2 java eclipse warnings arraylist checkstyle

我写了下面的课.

package com.stackoverflow.examples;

import java.util.ArrayList;

/** RandomX. */
public final class Names {
    /** List of names. */
    private ArrayList<String> names = new ArrayList<String>();

    /** Constructor. */
    public Names() {
        this.names.add("Test");
    }

}
Run Code Online (Sandbox Code Playgroud)

namesCheckstyle 声明的行中给出警告:

不允许声明变量,返回值或"ArrayList"类型的参数.

我该如何解决这个问题,这个警告背后的理由是什么?

T.J*_*der 7

......这个警告背后的理由是什么?

这是为了鼓励编码到界面而不是具体的实现.通过声明namesList<String>,您将仅限于使用List方法而不使用ArrayList提供的任何特定内容List.

一般的,编码到接口,是很好的做法.像大多数规则一样,也有例外.

我该如何解决这个问题......

声明namesList<String>,而不是ArrayList<String>:

/** List of names. */
private List<String> names = new ArrayList<String>();
Run Code Online (Sandbox Code Playgroud)

它仍然一个ArrayList<String>,它只是被宣布为一个List<String>.

如果你有充分的理由names必须声明为aArrayList<String>,你可以通过使用抑制注释(或抑制过滤器)告诉CheckStyle你在那里做出了有意的决定.注释可能是:

/** List of names. */
@SuppressWarnings("InterfaceIsType")
private ArrayList<String> names = new ArrayList<String>();
Run Code Online (Sandbox Code Playgroud)

...但仔细检查那个名字,我不知道CheckStyle.我从这里得到了名字.

或者当然,如果您不喜欢该警告,请将其全局关闭.