簡體   English   中英

Getter和Setter,線程和Java

[英]Getters and Setters, threading and Java

他們在學校里教我們在Java中使用getter和setter。 最近,我一直在讀這樣的東西是不好的,而不是面向對象的。 好的,因此我可以編寫一些僅使用構造函數設置數據並返回所需數據的代碼。

您如何不將getter與線程一起使用? 執行線程時,其類型始終為空,並且java中存在全局變量。 ..那么,如何不使用getter方法從線程取回數據呢?

最近,我一直在讀這樣的東西是不好的,而不是面向對象的。

相反,吸氣劑和吸氣劑是OOP的基石之一(需要這種副作用)。

但是,您仍然可以在啟動線程之前傳遞構造函數參數,例如,

new Thread(new MyRunnableObject(args)).start();

如果希望它返回不帶 getter的結果,則最好實現一個Callback ,該線程將在完成時執行。

吸氣或吸氣器本身並不是很糟糕的OO設計。

不好的是編碼實踐,它會自動為每個單個成員包括一個getter和一個setter,無論是否需要該getter / setter(以及將成員公開而不應該公開),因為這基本上將類的實現暴露給外界違反了信息隱藏/摘要的規定。 有時,這是由IDE自動完成的,這意味着這種做法比期望的要廣泛得多。

最近我一直在讀這樣的東西是不好的,不是面向對象的。誰告訴你這樣的廢話?

Getter和Setters確實是最佳實踐。 它們提供了用於屬性訪問的層,因此當需要修改類中訪問器的內部工作方式時,您可以進行一個單點更改。 如果需要封裝不同的訪問策略,則可以在子類中覆蓋它們。

關於線程:

您應該使用類似線程安全的集合之類的東西,我想這里有一些類用於線程之間的通信。 使用一個線程安全隊列,一個線程寫入該隊列,另一個線程從該隊列讀取。 我敢打賭那里有一些不錯的庫。 您實際上並不需要全局變量。 只需將相同的引用傳遞給兩個需要在線程之間進行通信的類即可。 您也可以通過管道或TCP進行通信,但這更多地用於進程間通信。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM