2016-11-07 7 views
0

私のカスタムクラスをチェックしてください。 "com.application.models.Custom$Response<com.application.models.User>" serverResponse: ""一般タイプjava

しかしdoSomethingのであれば:私は

final Custom<User> _custom = new Custom<>(new TypeToken<Custom<User>.Response<User>>(){}, ""); 

にdoSomethingの()を変更する場合は、DEBUGログがある

final Custom<T> _custom = new Custom<>(new TypeToken<Custom<T>.Response<T>>(){}, ""); 

DEBUGログは次のとおりです。

"com.application.models.Custom$Response<T>" serverResponse: " 

私はこのようなクラスを持つ:

public class Main 
{ 
    public static <T> void DoSomething() 
    { 
     final Custom<T> _custom = new Custom<>(new TypeToken<Custom<T>.Response<T>>(){}, ""); 
    } 
} 

//私は、Javaがほとんどということを意味し、コンパイル時のジェネリックで動作

public class User 
{ 
    public int Id; 

    public void Test() 
    { 
     Main.<User>DoSomething(); 
    } 
} 
+0

カスタム*を作成するときにTのジェネリックをコンパイルするときに何らかの理由で*を意味しますか? – Blackbelt

+2

私は 'Main main = new User <>();'はtypoであり、 'Main main = new Main <>();'でなければなりません。 – Eran

+0

はい、回答を更新しました –

答えて

0

...メインを呼び出す場所です変数

public class Custom<T> 
{ 
    private TypeToken<Response<T>> _responseType; _response: null 
    private Response<T> _response; _response: null 
    private String _serverResponse; _serverResponse = null; 

    public Custom(TypeToken<Response<T>> responseType, String serverResponse) `responseType: "com.application.models.Custom$Response<T>" serverResponse: "` 
    { 
     this._responseType = responseType; 
     this._serverResponse = serverResponse; 
    } 

    public class Response<t> 
    { 
     private List<t> data = null; 

     public List<t> GetData() 
     { 
      return this.data; 
     } 
    } 
} 

の右側にデバッグログを追加しましたあなたがコンパイルするとジェネリックがなくなってしまいます。コンパイル時のチェックだけです。それはあなたの質問に答えますか? Google Type Erasure。

+0

ですから、私は 'final Custom _custom = new Custom <>(model);を使用することはできません。 '? –

+0

Tが宣言されたクラスでない限り、その構文は機能しません。ジェネリックの抽象化は、クラスまたはメソッドを定義するときに使用できます。クラスをインスタンス化するときは、型を指定するか型の推論を使用してその型を推論します。 –

+0

ええ、私の質問をチェックすると、私のメソッドでTを定義しました... –

関連する問題