2017-01-04 45 views
3

私はapache commons拡張メソッド

からFilenameUtilsを使用しています私は、拡張メソッドにそれを作ることを決めたコード

val customPath = FilenameUtils.getPath(source) + 
     DEFAULT_SEPARATOR + FilenameUtils.getBaseName(source) 
val resultPath = FilenameUtils.separatorsToSystem(customPath) 

で、このような行動がありました。私はそれを別のクラスに移しました。

object PluginExtensions { 

    fun FilenameUtils.normalizeFilePath(source: String) : String { 
     val customPath = FilenameUtils.getPath(source) + 
       DEFAULT_SEPARATOR + FilenameUtils.getBaseName(source) 
     return FilenameUtils.separatorsToSystem(customPath) 
    } 

    fun File(name: String) : File = File(name).apply { 
     createNewFile() 
    } 
} 

私が問題である何それを

enter image description here

を使用していたクラスでその新しい方法を見つけることができませんが?

答えて

3

この拡張メソッドを使用するには、その前にインポートする必要があります。

import PluginExtensions.normalizeFilePath 

拡張機能は、PluginExtensionsオブジェクトに対してのみ定義されています。このオブジェクトの外側のどこにでも、拡張機能を表示するためにインポートが必要です。代わりに、パッケージレベルで拡張を定義することもできます。これにより、パッケージ全体で拡張機能が表示されます。

拡張機能のドキュメントをご覧ください。具体的にはScope of Extensionsです。

+1

私はトップレベルの拡張機能は、現在、それらを宣言する**好ましい方法**であることを強調するだろう。私は、オブジェクトレベルの拡張がそのように動作するはずであるとは確信していません。 –

+1

オブジェクト拡張のオートコンプリート関連の問題(現在「考慮する」):https://youtrack.jetbrains.com/issue/KT-15286#tab=History –

+0

私は何とかそれを輸入する必要があると感じましたが、どうやってそれを行うのか分かりませんでした。 – lapots

2

関数を呼び出すファイルに関数をインポートする必要があります。拡張機能は、拡張しているクラスにはありません。あなたが定義した場所にあります。

は、関数を使用しているファイルでこれを書く:

import PluginExtensions.normalizeFilePath