2017-06-25 37 views
-1

我需要創建某種類型的響應包裝(在其他控制器中)。所有的映射都應該返回一些必要的字段和一些特定於每個類的字段。動態列表類型的Java包裝類

例如,我有一個映射,返回User類的對象列表,並返回Account類型的對象列表。結果是總是List(我是從JdbcTemplate獲得),因爲它可能包含不止一個用戶/客戶:

public class User { 

    private String name; 
    private String jobTitle; 

    // constructor, getters, setters 
} 

public class Account { 

    private String id; 
    private String type; 

    // constructor, getters, setters 
} 

而且我有一個包裝:

public class Wrapper { 
    public String requestDate; 
    public String result; 
    public List<?> resultObject; // should be User or Account 

    // constructor, getters, setters 
} 

哪有我可以創建這樣一個包裝的實例:

//suppose I have a List of User objects called myUserList; 
Wrapper wrapper = new Wrapper(today, "success", User.class, myUserList); 

它看起來類似於Spring的BeanPropertyRowMapper<T>,但我困擾着爲我實施這樣的。

+0

https://docs.oracle.com/javase/tutorial/java/generics/ – luk2302

+0

以非常粗糙的方式,您可以使用'public List resultObject;'並且可以分配任何類型的對象列表。但它會使你的服務消費者對反應進行反序列化。 – Satish

+0

爲什麼不把requestDate和result放到自定義響應頭文件中?這會讓你的消息體只包含資源表示。 –

回答

-1

我不知道如果我理解正確的問題,但你可以使用泛型這樣

public class Wrapper<T> { 
    public String requestDate; 
    public String result; 
    public List<T> resultObject; 

    // constructor, getters, setters 
} 

正如宥可以看到你在「通用方法」中定義的包裝;現在每次構建包裝器實例時都可以指定一個類;例如,如果你想創建用戶的一個包裝:

List<User> myUserList = new ArrayList<User>(); 
Wrapper<User> usrWrap = new Wrapper(today, "success", myUserList); 

我希望它是有用的

安傑洛

0

關於使用這樣的事情是什麼:

包裝抽象類:

public abstract class Wrapper { 
    public String requestDate; 
    public String result; 

    // constructor, getters, setters 
} 

用戶包裝類:

public class UserWrapper extends Wrapper { 

    public List<User> resultObject; 

    // constructor, getters, setters 
} 

帳戶包裝類:

public class AccountWrapper extends Wrapper { 

    public List<Account> resultObject; 

    // constructor, getters, setters 
} 

消費:

UserWrapper userWrapper = new Wrapper(today, "success", myUserList); 

AccountWrapper accountWrapper = new Wrapper(today, "success", myAccountList); 

List<Wrapper> wrapperList = Array.asList(userWrapper, accountWrapper);