There is a variable
private Class clazz = Some.class; How to create from this variable
new Some(); Until came to this:
Object object = clazz.newInstance(); The fact is that it is not known which type will be received.
public class GsonRequest<ResponseObject> extends Request<ResponseObject> { private final Gson gson = new Gson(); private Class clazz; private final Map<String, String> headers = new HashMap<String, String>(); private final Listener<ResponseObject> listener; private ApiEnum ae; private Object object; /** * Make a GET request and return a parsed object from JSON. * * @param url URL of the request to make * @param clazz Relevant class object, for Gson's reflection * @param headers Map of request headers */ public GsonRequest(String url, ApiEnum ae, Class clazz, Listener<ResponseObject> listener, ErrorListener errorListener) { super(Method.GET, url, errorListener); this.listener = listener; this.ae = ae; this.clazz = clazz; /*switch (ae) { case SESSION: this.clazz = SessionRequest.class; break; case CATEGORIES: this.clazz = Categories.class; break; }*/ try { object = clazz.newInstance(); } catch (IllegalAccessException e) {} catch (InstantiationException e) {} } @Override public Map<String, String> getHeaders() throws AuthFailureError { headers.put("Id", "123"); return headers; } @Override protected void deliverResponse(ResponseObject response) { listener.onResponse(response); } @Override protected Response<ResponseObject> parseNetworkResponse(NetworkResponse response) { try { String json = new String( response.data, HttpHeaderParser.parseCharset(response.headers)); object = gson.fromJson(json, clazz); ResponseObject r = (ResponseObject) new BaseResponse().setAnswer(object); // В ResponseObject метод setAnswer не вызывается return Response.success( r, HttpHeaderParser.parseCacheHeaders(response)); } catch (UnsupportedEncodingException e) { return Response.error(new ParseError(e)); } catch (JsonSyntaxException e) { return Response.error(new ParseError(e)); } } } ResponsiObject:
public class ResponseObject { @Nullable private Object mAnswer; private RequestResult mRequestResult; public ResponseObject() { mRequestResult = RequestResult.ERROR; } @NonNull public RequestResult getRequestResult() { return mRequestResult; } public ResponseObject setRequestResult(RequestResult requestResult) { mRequestResult = requestResult; return this; } @Nullable public <T> T getTypedAnswer() { if (mAnswer == null) { return null; } //noinspection unchecked return (T) mAnswer; } public ResponseObject setAnswer(@Nullable Object answer) { mAnswer = answer; return this; } public void save(Context context) { } } Base Response:
public class BaseResponse extends ResponseObject { } Activity:
private Response.Listener<ResponseObject> myReqSuccessListener() { return new Response.Listener<ResponseObject>() { @Override public void onResponse(ResponseObject response) { if (response.getTypedAnswer() instanceof SessionRequest) { SessionRequest session = response.getTypedAnswer(); //... } else if (response.getTypedAnswer() instanceof Categories) { Categories categories = response.getTypedAnswer(); } }; }
Some some = (Some) clazz.newInstance();??? - Yuriy SPb ♦