private <T extends RobotResponse> T fetchTypedResponse( Class<T> clazz, RobotRequest request, long timeout){ long start = TimeUtils.now(); do{ RobotResponse resp = (RobotResponse)myResponseReceiver.getValue(); if(resp == null){ theLogger.warning("Received null Message from Receiver"); }else if(!isMatch(request, resp.getResponseHeader())){ theLogger.warning("Response does not match Request. Ignoring response."); }else if(clazz.isAssignableFrom(resp.getClass())){ return (T)resp; }else{ theLogger.log(Level.INFO, "Requested class ({0}) does not Response class ({1}).", new Object[]{clazz, resp.getClass()}); } long elapsed = TimeUtils.now() - start; timeout -= elapsed; }while(timeout > 0); return null; }