0

このメソッドでは、入力として文字列を取得し、文字列名に従って、値を返す必要がある場合があります。その文字列はいつかint、double、int64、boolなどです。動的型なので、メソッドの戻り型で定義する方法がわかりません。それに値を追加する方法と、戻り型が動的であるというこのメソッドを呼び出す方法、何か考えはありますか?

public static ? SwitchInput(String TypeName) {

       if (TypeName == "java.lang.String" ) {
            Return = "A";
        }
        else if (TypeName == "int" ) {
            Return =  1;
        }
        else if (TypeName == "double") {
            Return = 1.00
        }

boolおよび他のすべてのタイプの場合など

    }
4

3 に答える 3

2

Object返された型が祖先を共有しない限り、これが最善の策です

例 :

public static Object switchInput(String typeName) {       

   if ("java.lang.String".equals(typeName)) {
        return "A";
    }
    else if ("int".equals(typeName)) {
        return 1i;
    }
    else if ("double".equals(typeName)) {
        return 1.0d
    }
 }

ジェネリックを使用した別の例

 static <T> T switchInput(String typeName){
   if ("java.lang.String".equals(typeName)) {
    return "A";
    }
    else if ("int".equals(typeName)) {
        return 1i;
    }
    else if ("double".equals(typeName)) {
        return 1.0d
    }

 }

 String str = MyClass.switchInput("java.lang.String")

私はそれをテストしていません。これはジェネリックについての私の最初の考えのより単純なバージョンです

于 2013-01-22T11:22:44.083 に答える
1

問題の醜い解決策として、オブジェクト型を実行するようにメソッドを設定できます。(Boolean、Integer、Double はすべてサブタイプであるため)

ただし、返された値を (instanceof を使用して) 使用し、正しい型に再キャストするときに、後で正しい型を推測したことを確認する必要があります。

なぜそのような方法が必要なのか聞いてもいいですか?これは、メソッド定義の概念を少し悪用しています。

  public static Object SwitchInput(String TypeName) {

   if (TypeName.equals("java.lang.String") ) {
        Return = new String("A");
    }
    else if (TypeName.equals("int") ) {
        Return =  new Integer(1);
    }
    else if (TypeName.equals("double")) {
        Return = new Double(1.00) ;
    }
 etc for bool and all the other types

}

そして、このコード スニペットを使用して、コードのさらに下にある型を推測します

  if(returned_value instanceof Double)

于 2013-01-22T11:22:11.470 に答える
1

戻り値の型を知るには、これらすべての型が収まるコンテナーを見つける必要があります。明らかに、これは Object です。プリミティブ型を対応するオブジェクトに変換する必要があります (int から Integer など)。

より良いアプローチは、ジェネリック型 <T> を保持する新しいコンテナー クラスを作成することです。お気に入り

public class SwitchDemo {

public static SwitchInputType<?> switchInput(String typeName) {
    if (typeName.equals("java.lang.String")) {
        return new SwitchInputType<String>(new String("A"));
    } else if (typeName.equals("int")) {
        return new SwitchInputType<Integer>(new Integer(312));
    }
    return null;
}

public static class SwitchInputType<T> {
    private T type;

    public SwitchInputType(T type) {
        super();
        this.type = type;
    }

    public T getType() {
        return type;
    }

    public void setType(T type) {
        this.type = type;
    }
}

public static void main(String[] args) {
    SwitchInputType<?> sit1 = SwitchDemo.switchInput("java.lang.String");
    System.out.println(sit1.getType());
    SwitchInputType<?> sit2 = SwitchDemo.switchInput("int");
    System.out.println(sit2.getType());
}

}

于 2013-01-22T11:26:10.730 に答える