2014-10-01 66 views
0

例如,給定類型的URL,String是需要的類型。下面是一個有效的鏈條:如何找到從一個類型開始的API鏈,並最終返回另一個類型?

new DataInputStream(new BufferedInputStream(URL.openStream()).readLine() 

或其他一個依靠的Apache下議院IO庫:

IOUtils.toString(URL.openStream()) 

爲了找到像那些API鏈,它似乎需要保存的記錄的API指數所有方法簽名。這種搜索有沒有現成的解決方案?

+0

你的問題不是很清楚。 'URL.toString()'是否有效?你如何從一個到另一個?什麼是規則?這是用於靜態代碼分析嗎? – 2014-10-01 23:03:17

+0

@SotiriosDelimanolis yes URL.toString()也是有效的。目標是獲得所有這樣的有效鏈。其中一個動機是在不熟悉新域的API時節省API研究的時間。 – FromWhereToWhere 2014-10-01 23:06:50

+1

在這種情況下,答案是有無限的這樣的鏈條。你在哪裏停下來? – 2014-10-01 23:13:25

回答

1

這聽起來像是你要求類似轉換的「六度分離」的東西嗎?這是個好主意。我不知道任何人在構建這樣的工具,但似乎利用Maven Central並將事情抽象成可以遍歷方法的類型輸入/輸出的圖表是一個開始。

我發現自己在斯卡拉做了很多「類型皮條」來做類似的事情,但仍然是手工。在Scala中使用implicits可以讓這種情況在呼叫站點代碼中透明地發生。它還允許用新方法「豐富」現有類型(通常是那些最終的類型,如String)。

因此,在Java中,對於簡單類型的轉換(例如字符串轉換爲URL),您看過http://commons.apache.org/sandbox/commons-convert/它帶有一些預打包轉換,以及用於添加自己的很多方法(儘管比較笨拙)斯卡拉「拉皮條」。

儘管如此,嚴格來說,你並沒有將URL轉換爲String。你正在做的是將給定URL處的資源表示(希望基於文本)轉換爲一個String。這是一種合理的需要,但並不是真正代表這些類型的東西。你想要的是一個TextualResource(用URL構造)到String轉換器。鑑於新的TextualResource類型想要做一些有用的事情,它可能會在toString方法中實現你的第一個例子。

+0

你的第一段話讓我想起了。我希望能夠充分利用迄今爲止累積的所有Java庫。 – FromWhereToWhere 2014-10-01 23:38:28

相關問題