跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 为什么 Android Studio 4+会推荐 List 设为 final
未分類
31 12 月 2020

为什么 Android Studio 4+会推荐 List 设为 final

为什么 Android Studio 4+会推荐 List 设为 final

資深大佬 : QBugHunter 5

class School{ private List<String> studentNames = new ArrayList<>(); //... }; 

之前 3.X 版本没什么问题,但到了 4.X 版本就提示我,该域可以设为 final,即

private final List<String> studentNames = new ArrayList<>(); 

w 为什么 4.X 版本就推荐我把这种类型的 List 设为 final?

大佬有話說 (22)

  • 資深大佬 : Smash

    任何不需要改变的变量都用 final,这个习惯不挺好的吗?

  • 主 資深大佬 : QBugHunter

    @Smash
    但实际上在类成员函数里,有大量的 add(),和 remove()之类的函数
    而且在 3.x 版本是没有这个提示的

  • 資深大佬 : acr0ss

    @QBugHunter Java 又不是 Rust 。
    变量不能重新赋值,类成员方法操作没有限制。

  • 資深大佬 : wuliaoshixia

    用 kotlin 就不会有这个疑问了,默认都用 val

  • 資深大佬 : yukong

    @QBugHunter add remove 又不会改变你 studentNames 这个变量的引用地址 除非你 List 内部的对象数组也是 final 那才是不能 add remove

  • 資深大佬 : cshijiel

    @QBugHunter #2 final 与 add 、remove 不冲突

  • 資深大佬 : chendy

    因为你代码里没有给这个字段重新赋值的地方
    于是,ide 认为你的代码逻辑里,这个字段**不应该**被重新赋值,所以建议设置成 final 避免被重新赋值

  • 資深大佬 : ssynhtn

    这种过于死板的提示可以关掉

  • 資深大佬 : Cbdy

    为了提醒你换 kotlin

  • 資深大佬 : mind3x

    推荐阅读:
    https://www.quora.com/Why-is-immutability-so-important-in-software-development
    https://pasztor.at/blog/why-immutability-matters
    https://www.google.com/search?q=why+immutability+is+important&oq=why+immu&aqs=chrome.0.0j69i57j0l6.2167j0j4&sourceid=chrome&ie=UTF-8

    Java 15 以后可以直接上 Record,15 以前可以 https://immutables.github.io/

    当然,直接 Kotlin/Scala + val + data class 也是美好的。

  • 資深大佬 : tiiime

    友情提醒,data class 做 api 有大坑

  • 資深大佬 : binbinyouliiii

    @mind3x #10 醒醒,这是 Android

  • 資深大佬 : VinsonGuo

    @tiiime 有啥大坑

  • 資深大佬 : a0000

    @tiiime 同问有啥大坑,能不能讲讲碰到的问题

  • 資深大佬 : tiiime

    @VinsonGuo @a0000

    https://jakewharton.com/public-api-challenges-in-kotlin/

  • 資深大佬 : 20015jjw

    这不就应该是 final 吗
    不能 add 的是 immutable

  • 資深大佬 : john6lq

    这是基础没打牢

  • 資深大佬 : lancelock

    不需要改变就 final 呗,又没影响。像 rust 定义的变量默认就是 final 。其实这是函数式编程的思想吧,你也可以不管他

  • 資深大佬 : youla

    直觉让我以为 final list 无法 add

  • 資深大佬 : LGA1150

    #2
    如果你会 C
    final: char *const;
    immutable: const char *;

  • 資深大佬 : kraits

    写了 final 后,不能再有其他的同类型变量指向它,如果这个变量包含在一个类里,new 对象时候它就不能是 null 。
    可能主对这个 final 有误解,add remove 是这个 类的 method,写了 final 仍然可以调用 method 。这是指针问题

  • 資深大佬 : hantsy

    @youla 那是 Immutable.

    Java 中目前只有 List.of, Set.of, Map.of , 还有 Collections.immutableXXX 创建的 Collection 是无法变更的,有 Immutable 概念。

    Guava 有很多补充类。

    final 用类的属性上是防止重新(使用=)赋值,用在 类上面是为阻止继承。

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具