1

私はJavaが初めてで、Java6でジェネリックメソッドを書く必要があります。私の目的は、次の C# コードで表すことができます。誰かがJavaでそれを書く方法を教えてもらえますか?

class Program
{
    static void Main(string[] args)
    {
        DataService svc = new DataService();
        IList<Deposit> list = svc.GetList<Deposit, DepositParam, DepositParamList>();
    }
}

class Deposit { ... }
class DepositParam { ... }
class DepositParamList { ... }

class DataService
{
    public IList<T> GetList<T, K, P>()
    {
        // build an xml string according to the given types, methods and properties
        string request = BuildRequestXml(typeof(T), typeof(K), typeof(P));

        // invoke the remote service and get the xml result
        string response = Invoke(request);

        // deserialize the xml to the object
        return Deserialize<T>(response);
    }

    ...
}
4

2 に答える 2

3

GenericsはJavaのコンパイル時のみの機能であるため、直接同等のものはありません。 typeof(T)単に存在しません。Javaポートの1つのオプションは、メソッドを次のようにすることです。

public <T, K, P> List<T> GetList(Class<T> arg1, Class<K> arg2, Class<P> arg3)
{
    // build an xml string according to the given types, methods and properties
    string request = BuildRequestXml(arg1, arg2, arg3);

    // invoke the remote service and get the xml result
    string response = Invoke(request);

    // deserialize the xml to the object
    return Deserialize<T>(response);
}

このように、実行時に型を使用できるようにする方法でコードを記述するように呼び出し元に要求します。

于 2012-11-09T05:52:56.073 に答える
1

いくつかの問題 -
A. ジェネリックは、C# よりも Java の方が「弱い」です。
「typeof がないため、typeof を表すクラス パラメータを渡す必要があります
。B. 署名には、ジェネリック定義に K と P も含める必要があります。
したがって、コードは次のようになります。

public <T,K,P> IList<T> GetList(Class<T> clazzT, Class<K> claszzK,lass<P> clazzP) {
    String request = buildRequestXml(clazzT, clazzK, clazzP);
    String response = invoke(request);
    return Deserialize(repsonse);
}
于 2012-11-09T05:57:02.583 に答える