簡體   English   中英

比較器作為靜態字段-接口還是實現?

[英]Comparator as static field - interface or implementation?

我有一個已經具有“自然”順序的類,並希望定義一個可以與String.CASE_INSENSITIVE_ORDER類似使用的不同Comparator-即,將其定義為在需要時要引用的實例化靜態字段。

對於實際比較類型的接口Foo(它將是Comparator<Foo> ),我贊成將其放在那里而不是FooImpl(在這種情況下,只有一個實現,如果有所不同)。 它使用類似於String的內部類來實現,但是由於Foo是接口,因此該類必須是公共的。

想知道將它放在FooImpl中而不是Foo中是否更好,為什么? 我也不在乎實現類的公共可見性,但是它應該是一個獨立的獨立包可見實體嗎?

如果特定於接口,請放入接口。 如果特定於實現,則放入實現。 這也是最有意義的。 當前的實現數量無關緊要。 無論如何,您始終可以為實現提供自己的實現特定比較器。

比較器是否打算在FooImpl之外使用? 如果是這樣,您可以像枚舉一樣將其放在界面中。 如果使用新比較器的任何代碼僅使用Foo接口,則不會將其放在FooImpl中。

他們只需要使用Comparator就不必了解FooImpl。

暫無
暫無

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

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