2013-09-23 27 views
6

Trong đoạn mã sau, giá trị trung bình Type type là gì và dấu ngoặc nhọn được sử dụng để làm gì?Niềng răng xoăn sau khi gọi hàm là gì?

Type type = new TypeToken<List<String>>(){}.getType(); 
List<String> list = converter.fromJson(jsonStringArray, type); 
+0

Type type nghĩa của nó một biến gọi là loại Loại lớp –

+0

nền giải thích: https://sites.google.com/site/gson/ gson-user-guide # TOC-Serializing-và-Deserializing-Generic-Types – BalusC

+0

Một cách rõ ràng nếu loại Type không rõ ràng thì mọi thứ khác trong câu hỏi của bạn là cách trước –

Trả lời

4

Đó không phải sau một cuộc gọi hàm, mà sau cuộc gọi hàm tạo. Dòng

Type type = new TypeToken<List<String>>(){}.getType(); 

đang tạo ra một thể hiện của một lớp con nặc danh của TypeToken, và sau đó gọi phương thức getType() của nó. Bạn có thể làm như vậy trong hai dòng:

TypeToken<List<String>> typeToken = new TypeToken<List<String>>(){}; 
Type type = typeToken.getType(); 

Các Java Tutorial Anonymous Subclasses có nhiều ví dụ về điều này. Đây là một cách sử dụng hơi khác thường, vì không có phương thức nào bị ghi đè và không có khối khởi tạo thể hiện nào đang được sử dụng. (Xem Initializing Fields để biết thêm về các khối khởi tạo mẫu.)

5

Type là một lớp.

new TypeToken<List<String>>() { 
}.getType(); 

Đang tạo lớp bên trong ẩn danh và gọi getType() trên đối tượng được tạo.

1

Dấu ngoặc nhọn là hàm tạo lớp ẩn danh và được sử dụng sau khi gọi hàm tạo. Bên trong bạn có thể ghi đè hoặc tạo phương thức.

Ví dụ:

private static class Foo { 

    public int baz() { 
     return 0; 
    } 
} 

public static void main(final String[] args) { 
    final Foo foo = new Foo() { 
     @Override 
     public int baz() { 
      return 1; 
     } 
    }; 

    System.out.println(foo.baz()); 
} 

Output:

1 
Các vấn đề liên quan