3

多くの if-else ステートメントを含む、これに似た Java コードがあります。

if(...){
     Object1 obj = new Object1();
     String text = obj.getString();
     int number = obj.getInt();
     //do something

}else if (...){
     Object2 obj = new Object2();
     String text = obj.getString();
     int number = obj.getInt();
     //do something
...

どういうわけか、この方法でコードを書くことは可能ですか:

<something> obj;  //<- ?

if(..)
     obj = new Object1;
else if(..)
     obj = new Object2;
...
String text = obj.getString();
int number = obj.getInt();
//do something

手伝ってくれてありがとう。

PS: C++ でソリューションを作成できます。私はJavaのためにそれを理解します

PS(2): 下手な英語でごめんなさい - それは私の母国語ではありません

4

3 に答える 3

3

どちらの場合も、基本クラスが必要です。どちらの場合も、最初にNULL参照 (Java) またはポインター (C++) を持つことができ、次に設定します。

BaseObject* pBase = NULL;
if (...)
     pBase = new Object1;
else
     pBase = new Object2;

Java では、それほど違いはありません (nullの代わりにアスタリスクとがありませんNULL)。

于 2013-01-03T11:53:39.020 に答える
3
Object obj = null;
if(..)
     obj = new Object1();
else if(..)
     obj = new Object2();

ただし、コンパイラの場合、objは 型であることに注意してObjectください。Object1ダウンキャストに固有の、またはObject2ダウンキャストなしのメソッドを適用することはできません。

于 2013-01-03T11:53:55.687 に答える
3

上記の代替はインターフェースです

public interface Ibase {
  String getString();
  int getInt();
}

次に、2 つのオブジェクトがそのインターフェイスを実装して、これらのメソッドを使用できるようにします。

public class Object1 implements IBase {
 public String getString() {
   return "string";
 }

 public int getInt() {
   return 0;
 }
}

次に、上記のように使用できます

IBase object = null
if(option)
  object = new Object1()
else
 object = new Object2();

object.getString();
object.getInt();

インターフェイスは、サブクラスが従わなければならない契約のようなものだと考えてください。

于 2013-01-03T12:04:39.120 に答える