私は2つのクラスを持っています。それらは同じ静的メソッド名と関数と3つのクラスを持っています。なぜなら、2つ持っているので、条件付きケースで呼び出す必要があります。Javaでポインタを返す
ので、私は方法を指すように、私はオブジェクトを返すためにそれを使用することができますクラスCのメソッドの内部で、この条件文if(m==n) {return new Class A()} else {return new Class B()
を作ることができ、クラスAまたはクラスBから
私は2つのクラスを持っています。それらは同じ静的メソッド名と関数と3つのクラスを持っています。なぜなら、2つ持っているので、条件付きケースで呼び出す必要があります。Javaでポインタを返す
ので、私は方法を指すように、私はオブジェクトを返すためにそれを使用することができますクラスCのメソッドの内部で、この条件文if(m==n) {return new Class A()} else {return new Class B()
を作ることができ、クラスAまたはクラスBから
あなたは、Java 8メソッドのリファレンスを使用することができます。
のコードを表示していないので、メソッドシグネチャがわからないため、void X()
と仮定します。つまり、パラメータも返されません。
Runnable r = (m==n ? A::mymethod : B::mymethod);
r.run();
署名(除。メソッド名)が異なる場合は、Runnable
以外の機能のインタフェースを使用する必要があります。
このための簡単な解決策は、(あなたはJavaでvoid *
に着く最も近いものである)Object
を返し、あなたが得たどのクラスを知るためにinstanceofを使用することです:
Object getMyObject(int m, int n) {
if(m==n) {
return new Class A();
}
else {
return new Class B();
}
}
void useObject(int m, int n)
{
Object o = getMyObject(m, n);
if (o instanceof A) {
A a = (A)o;
a.doSomething();
} else if (o instanceof B) {
B b = (B)o;
b.doSomethingElse();
}
}
してください、助けるためにあなたのコードを投稿あなた –
1)Javaには*ポインタ*はありません。 --- 2)呼び出されるメソッドが静的である場合、クラスのインスタンスを作成するのはなぜですか? – Andreas
AとBの両方が同じクラスを拡張していたり、同じインターフェイスを実装していて、関数がスーパークラス(Objectは常に動作します)またはインターフェイスを返した場合はYesです。 – maraca