将List设置为常量是否合理有效?

Bin*_*ong 2 java google-api guava

Google的Oauth2库方法需要一个针对scopes参数的Java列表.将参数编码为List文字是否合理,如下所示:

public  static  final List<String> YOUTUBE_SCOPES = Lists.newArrayList(
      "https://www.googleapis.com/auth/youtube.upload",
      "https://www.googleapis.com/auth/youtube.readonly");
Run Code Online (Sandbox Code Playgroud)

这样我就可以:

SendToGoogleUtils.getGoogleAccountCredential(activity, accountName, YOUTUBE_SCOPES );
Run Code Online (Sandbox Code Playgroud)

Java编译器是否会创建有效的YOUTUBE_SCOPES文字?

dur*_*597 5

ArrayLists不是一成不变的,即使它们被宣布为final; 这只意味着变量不能改变,但其内容可以.请参阅:为什么最终对象可以修改?

因为你正在使用Lists.newArrayList,看起来你正在使用番石榴.番石榴有一个很好的解决方案:ImmutableList.所以你的代码是:

public static final List<String> YOUTUBE_SCOPES = ImmutableList.of(
  "https://www.googleapis.com/auth/youtube.upload",
  "https://www.googleapis.com/auth/youtube.readonly");
Run Code Online (Sandbox Code Playgroud)

也就是说,这里还有另外一个问题,那就是"如果我想稍后改变这个怎么办?"

我不知道您是否有任何类型的配置文件加载,但请注意,如果您确实需要更改这些范围(例如,如果Google更改了URL),则必须更改链接.如果可以通过重新编译你的jar来改变它,那么不要担心它; 但是,您可能需要考虑将这些魔术常量放入某种配置文件中.

  • 我建议将变量的类型更改为`ImmutableList`:`public static final ImmutableList <String> YOUTUBE_SCOPES = ImmutableList.of(...);` (2认同)