簡體   English   中英

使用外部代碼的方法(Java)

[英]Methods with External Code (Java)

我目前正在研究Java圖形API,並希望實現輕松的自定義。 我想到的部分原因是能夠用自定義代碼替換標准代碼。 為了實現這一點,我想知道我是否可以在外部可交換文件中使用我的代碼引用代碼的方法(可能用或不用其他語言編寫,例如RhinoScript)。 例如,如果使用API​​的人感覺特定方法的代碼效率低下,他們可以用他們認為更有效的代碼替換方法引用的文件和他們自己的文件。

我理解接口和抽象類可能是實現這一目標的一種選擇,但我覺得我所描述的方法,如果可以實現,將具有可重用代碼的優勢,使用不同腳本語言更容易實現API,以及通常更容易修改的方法碼。

我要問的底線是:是否有可能讓一個方法執行代碼包含在一個獨立的文件中(只包含該方法將執行的代碼),這可能是也可能不是用與其分開的語言編寫的Java,如果是這樣,我將如何進行此操作或我應該為此研究哪些主題?

最后,如果在這個論壇上提出這個問題不是一個可接受的問題,或者我沒有明確表達我的問題,我表示歉意。

我認為這不是要走的路,如果你想為你的庫提供定制,接口和抽象類是你最好的選擇。 實現其他語言的包裝器效率非常低,而且可能相對較慢,甚至沒有從它添加到代碼中的復雜性開始。 你打算如何傳遞參數? 收到返回值? 在運行時或語法錯誤的情況下管理異常?

當然這一切都是可能的,但作為開發人員,我絕不會使用像你描述的那樣工作的API。

通常我建議使用以下方法之一:

  • 定義自定義代碼需要實現的接口
  • 提供自定義代碼可以通過繼承擴展的(可能的抽象) 基類

您選擇哪一個取決於您,通常基類對於人們來說更容易使用(因為他們只需要覆蓋他們想要更改的特定方法),而接口可以提供更好的抽象,並且可以更靈活一些/長期可維護。

如果這些解決方案不適合您,那么您始終可以使您的項目開源 - 那么具有更好實現的人可以將他們的改進貢獻回主代碼庫。

如果你真的想在另一個語言中允許擴展,那么我仍然認為接口/基類是可行的方法:許多其他JVM語言允許你擴展Java類或實現接口。 然后將它留給用戶生成他們喜歡的任何代碼。

您要求做的事情聽起來與Reflection API可以提供的完全相同:

可擴展性功能

應用程序可以通過使用完全限定名稱創建可擴展性對象的實例來使用外部的用戶定義類。

在這里閱讀更多內容:

http://docs.oracle.com/javase/tutorial/reflect/

暫無
暫無

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

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