Java でデフォルトのメソッド パラメータ値を設定することは可能ですか?
例:メソッドがある場合
public int doSomething(int arg1, int arg2)
{
//some logic here
return 0;
}
パラメータの有無にかかわらず呼び出すことができるように、指定されたメソッドを変更することは可能ですか?
例:
doSomething(param1, param2);
doSomething();
ありがとう!
Java でデフォルトのメソッド パラメータ値を設定することは可能ですか?
例:メソッドがある場合
public int doSomething(int arg1, int arg2)
{
//some logic here
return 0;
}
パラメータの有無にかかわらず呼び出すことができるように、指定されたメソッドを変更することは可能ですか?
例:
doSomething(param1, param2);
doSomething();
ありがとう!
これは、メソッドのオーバーロードによって実現できます。
public int doSomething(int arg1, int arg2)
{
return 0;
}
public int doSomething()
{
return doSomething(defaultValue0, defaultValue1);
}
このパラメーターなしのメソッドを作成することにより、パラメーターなしのメソッドの実装内で指定したデフォルトの引数を使用して、ユーザーが parameterfull メソッドを呼び出すことができるようになります。これは、メソッドのオーバーロードとして知られています。
引数が同じタイプの場合、varargs を使用できます。
public int something(int... args) {
int a = 0;
int b = 0;
if (args.length > 0) {
a = args[0];
}
if (args.length > 1) {
b = args[1];
}
return a + b
}
しかし、この方法では、個々の引数のセマンティクスが失われます。または
パラメータ化されたバージョンへの呼び出しを中継するオーバーロードされたメソッドがあります
public int something() {
return something(1, 2);
}
または、メソッドが何らかの初期化手順の一部である場合は、代わりにビルダー パターンを使用できます。
class FoodBuilder {
int saltAmount;
int meatAmount;
FoodBuilder setSaltAmount(int saltAmount) {
this.saltAmount = saltAmount;
return this;
}
FoodBuilder setMeatAmount(int meatAmount) {
this.meatAmount = meatAmount;
return this;
}
Food build() {
return new Food(saltAmount, meatAmount);
}
}
Food f = new FoodBuilder().setSaltAmount(10).build();
Food f2 = new FoodBuilder().setSaltAmount(10).setMeatAmount(5).build();
次に、Food オブジェクトを操作します
int doSomething(Food f) {
return f.getSaltAmount() + f.getMeatAmount();
}
ビルダー パターンを使用すると、後でパラメーターを追加/削除することができ、オーバーロードされた新しいメソッドを作成する必要はありません。
いいえ。Java は C++ のようなデフォルト パラメータをサポートしていません。別のメソッドを定義する必要があります。
public int doSomething()
{
return doSomething(value1, value2);
}
C# のようにパラメーターのデフォルト値を宣言することはできませんが (私は信じています)、単純にオーバーロードを作成することができます。
public int doSomething(int arg1, int arg2) {
//some logic here
return 0;
}
//overload supplies default values of 1 and 2
public int doSomething() {
return doSomething(1, 2);
}
このようなことをする場合は、あなたのコードを扱う他のすべての人に好意を示し、使用しているデフォルト値が何であるかを Javadoc コメントで必ず言及してください。
Java でデフォルト値を設定することはできません。これに対処するための私の好ましい方法は、メソッドをオーバーロードすることです。
public class MyClass
{
public int doSomething(int arg1, int arg2)
{
...
}
public int doSomething()
{
return doSomething(<default value>, <default value>);
}
}
メソッドをさまざまなパラメーターでオーバーロードできます。
public int doSomething(int arg1, int arg2)
{
//some logic here
return 0;
}
public int doSomething(
{
doSomething(0,0)
}
このドキュメントを誤解していないことを願っていますが、Java 1.8 を使用している場合、理論上は、実装するインターフェース内でデフォルト メソッド (「ディフェンダー メソッド」) の動作する実装を定義することで、このようなことを実現できます。
interface DoInterface {
void doNothing();
public default void remove() {
throw new UnsupportedOperationException("remove");
}
public default int doSomething( int arg1, int arg2) {
val = arg1 + arg2 * arg1;
log( "Value is: " + val );
return val;
}
}
class DoIt extends DoInterface {
DoIt() {
log("Called DoIt constructor.");
}
public int doSomething() {
int val = doSomething( 0, 100 );
return val;
}
}
次に、いずれかの方法で呼び出します。
DoIt d = new DoIt();
d.doSomething();
d.soSomething( 5, 45 );