2

arraylist と、arraylist にオブジェクトを追加するメソッドを取得しました。現在、オーバーロードされたメソッドを使用して、さまざまな種類のオブジェクトを区別しています。未定義のオブジェクトをメソッドのパラメーターとして使用し、メソッド内でそれがどのようなオブジェクトであるかを区別する方法はありますか?

4

3 に答える 3

2

これを行う 1 つの方法は、2 つのパラメーターを渡すことです。最初のパラメータは渡す必要があるオブジェクトで、2 番目のパラメータは渡すオブジェクトのタイプのインジケータです。

public void TestFunc(Object obj1, String type){}

もちろん、文字列を使用するよりも優れた方法がある可能性があります。列挙型やその他のメカニズムを使用できます。追加のパラメーターを渡したくない場合は、InstanceOf を使用して区別することもできます。

于 2013-10-25T14:39:18.357 に答える
2

「パラメーターとして未定義のオブジェクト」とは、関数宣言でオブジェクトの型を指定しない関数を作成しようとしているということであり、関数を 1 つだけ持つことができます。

これは、ジェネリックで行うことができます。

それ以外の:

static void func(String str)
{
  System.out.println("The string is: "+str);
}
static void func(Integer integer)
{
  System.out.println("The integer is: "+integer);
}

あなたが持つことができます:

static <T> void func(T value)
{
  if (value instanceof Integer)
    System.out.println("The integer is: "+value);
  else if (value instanceof String)
    System.out.println("The string is: "+value);
  else
     System.out.println("Type not supported!! - "+value.getClass());
}

テスト:

func("abc"); // The string is: abc
func(3);     // The integer is: 3
func(3.0);   // Type not supported!! - class java.lang.Double

詳細については、 Java ジェネリックを参照してください。

于 2013-10-25T14:44:23.137 に答える
1

「未定義のオブジェクト」とは、あなたが意味すると思いますnull。特定のタイプのオブジェクトにキャストnullすることができ、コンパイラはどのオーバーロードされたメソッドを呼び出しにバインドするかを認識します。

public void method(String s) { . . . }
public void method(Integer s) { . . . }
public void caller() {
    method((String) null);
    method((Integer) null);
}

未定義の型のオブジェクトがある場合、instanceofoperator を使用してその型をテストしたりgetClass()、クラス オブジェクト自体を取得したりできます。不明な型の値がある場合null、メソッド シグネチャを再定義して type の追加の引数を受け入れる以外にできることはあまりありませんClass

ただし、Dukeling のコメントが正確であり、「未定義のオブジェクト」が「不明な型のオブジェクト」を意味する場合は、Java ジェネリックの使用を検討する必要があります。ジェネリックを使用すると、さまざまなオブジェクト タイプで機能する単一のメソッドを記述できます。

public <T> void method(T arg) { . . . }
public void caller() {
    method("String"); // String arg
    method(0);        // Integer arg
}

詳細については、 Java ジェネリックのチュートリアルから始めてください。

于 2013-10-25T14:38:13.097 に答える