亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用泛型在 Map 中存儲和調用方法

使用泛型在 Map 中存儲和調用方法

忽然笑 2023-06-08 20:48:16
我正在嘗試學習一些我認為更復雜的 Java,我對泛型很感興趣,因為我注意到它可以做一些令人驚奇的事情。我想過這樣做:有一個 Map 將存儲一個類和某種形式的方法,這將在給定某個類的情況下使用,可以說它將在方法內String.class運行代碼。我看到它正在完成并致力于一個名為ACF(Aikar 命令框架)的項目。它如何設法注冊新方法的示例:registerContext(char.class, c -> {? ? String s = c.popFirstArg();? ? if (s.length() > 1) {? ? ? ? throw new InvalidCommandArgument(MessageKeys.MUST_BE_MAX_LENGTH, "{max}", String.valueOf(1));? ? }? ? return s.charAt(0);});他的注冊方法看起來很簡單:// The mapprotected final Map<Class<?>, ContextResolver<?, R>> contextMap = new HashMap<>();// The register classpublic <T> void registerContext(Class<T> context, ContextResolver<T, R> supplier) {? ? contextMap.put(context, supplier);}我試著做了類似的東西,但我還是不太明白。我想做更多的研究,但此時我不知道要搜索什么。不知道這種方法存儲或者方法聲明叫什么。我看了一些視頻并閱讀了一些關于 Java 中的泛型的文章,但大部分都非?;A,我設法理解了這些,但仍然無法弄清楚它是如何工作的。我期望的結果是能夠調用contextMap.get(class).run(),它會調用該方法。編輯:PS:我不是要任何人為我編寫代碼或做這個或那個,只是為了指出正確的學習方向,剩下的我會自己做。或者也許是一些關于泛型的小解釋。
查看完整描述

1 回答

?
慕神8447489

TA貢獻1780條經驗 獲得超1個贊

在 Java 8 中,很少有功能接口可以幫助實現這種功能:Function, Supplier,Consumer和Runnable(較舊的)。


Runnable只是一段代碼運行,沒有輸入,沒有輸出。您可能以前見過它:要創建一個新的,Thread您需要提供一個Runnable,然后新的Thread調用該代碼。Supplier是類似的東西,但它返回一個值。Consumer接受輸入,但不返回任何內容。Function有輸入和輸出,在你的例子中使用了類似的東西。


所以基本上,根據您的需要,您可以創建一個方法映射,其中鍵是方法的名稱,值是可運行的(要運行的代碼段)- Map<String, Runnable>。


Map<String, Runnable> methodMap = new HashMap<>();

methodMap.put("say hello", () -> System.out.println("Hello"));

methodMap.put("say goodbye", () -> System.out.println("Goodbye"));


methodMap.get("say hello").run();

所有這些都與泛型有一點關系,但想象一下你想要存儲帶有輸入和輸出的方法,這會成為問題。你會需要類似的東西Map<String, Function<?, ?>>。


查看完整回答
反對 回復 2023-06-08
  • 1 回答
  • 0 關注
  • 154 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號