まずはメソッドを定義する側の事情から。
そのメソッドが「ファイルのパス名」を指定するか「ファイルそのもの」を指定するかはメソッドの設計者がどちらにでも決められます。
そのメソッドへファイルのパス名をStringとして渡すならFileとしての操作をする際にメソッドの中で
new File(fileName)
のようにしてFileのインスタンスを生成することになります。しかし同じファイルを別のメソッドにも渡さねばならないとしたらまたそのメソッドの中でも同様にFileのインスタンスを生成しなければなりません。呼び出し元でFileのインスタンスを生成しておいて、それを別々のメソッドへそれぞれ渡してやると個々のメソッドの中で一々new Fileとしなくてすみ、それだけインスタンス生成のオーバーヘッドを減らせるという考え方ができます。
汎用的なメソッドであればあるほど、どのような使い方をするかメソッド設計者が予想できないケースもあります。そういうメソッドを設計する際には「どちらでも渡せる」ように設計されている場合もあります。
例:
FileInputStreamのコンストラクター
FileInputStream(String path)
FileInputStream(File file)
ファイルパスをこのインスタンスの生成以外に使わないならファイルパスを指定した方が便利ですし、何かの目的で既にファイルのインスタンスが生成されていればそれをそのまま渡すこともできるという具合です。
さて・・・
これはインスタンス生成によりメモリを圧迫するのに、わざわざこうすることにはメリットがあると感じましたが、どのようなメリットがあるのでしょうか?
ファイルパス、ファイルそのもののどちらでも渡せるメソッドがオーバーロードにより定義されているとき、わざわざ
method(new File(path))
と書くことに殆ど意味はありません。多分パスを渡せるオーバーロードメソッドがあることを書いた人が知らないだけです。一方、ファイルしか引数に取れないメソッドを呼び出すなら、パスを渡してもダメなわけですから上のような呼び出し方をするのは必然です。他に呼び出しようがないからです。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2017/05/16 08:56