簡體   English   中英

在Java中導出函數對象的最佳實踐是什么?

[英]What is the best practice to export function objects in Java?

在Java中創建function objects (導出一個適用於其他對象的單個方法的無狀態對象)的最佳實踐是什么?

查看即將推出的Java 8功能接口有益的

Java 8類庫有一個新的包java.util.functions,它包含幾個新的功能接口。 其中許多可以與Collections API一起使用。

如果您遵循此處展示的模式,您將擁有一個功能界面(支持一種方法的界面)和一個沒有成員的實現。 您的函數對象不應該調用可能會改變其狀態的方法參數上的任何方法(即表現出副作用)。 不幸的是你不能強制執行 - 你必須依賴慣例。

Java是面向對象的編程語言,因此使用策略設計模式。

Java8應該有lambdas來簡化功能接口實現的創建。 在Java8之前,您可以查看番石榴庫提供的內容: 功能說明

以下是文檔的摘錄:

Guava提供了兩個基本的“功能”接口:Function,它有單個方法B apply(A input)。 通常期望函數實例是引用透明的 - 沒有副作用 - 並且與equals一致,即a.equals(b)意味着function.apply(a).equals(function.apply(b) )。 謂詞,它有單個方法boolean apply(T輸入)。 謂詞的實例通常預期是無副作用的並且與equals一致。

評論后確定,這是一個答案:傳遞函數沒有簡單/方便的方法。

大多數情況下,您將聲明一個實現接口的內部類,例如Comparatorhttp//docs.oracle.com/javase/6/docs/api/java/util/Comparator.html

函數不能作為參數傳遞的事實產生了許多所謂的設計模式,在這些模式中傳遞聲明具有這些函數的對象類/接口。

正如其他人所提到的,使用Java 8可以讓生活變得更輕松。

暫無
暫無

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

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