2017-11-19 2 views
1

자바 배경에서 자바 응용 프로그램을 만들고 있습니다.Java HTTP 요청의 약식 콜백

내가 HTTP Get 요청을 구현하기 위해 다음과 같은 코드가 있습니다 그러나 좀 더 간결한 방식으로 콜백을 사용할 수있는 방법이있다, 이것은 나를 위해 작동

HttpGetRequest get = new HttpGetRequest(new HttpGetRequest.CustomCallback() { 
    @Override 
    public void completionHandler(Boolean success, String result) throws JSONException, InterruptedException { 
     // Do things here 
    } 
}); 
get.execute("https://foo.bar/status"); 

를, 즉 인스턴스를 인스턴스화 할 필요가 없습니다 클래스 메서드를 재정의합니까?

나는 fetch(url,() => { /* do things here */ })과 같은 것으로 사용되어 친숙한 지 알고 싶습니다.

+0

어떤 시점에서 인스턴스를 인스턴스화해야합니다 ... 람다가 가능합니다, 확실하게 –

+0

혹시 제가 예를 들어 주시겠습니까? 사용법 구문을 보여 주면 아마도 구현을 해결할 수있을 것입니다. – dthree

+0

보유한 http 라이브러리에 따라 다릅니다. Try Okhttp –

답변

1

추가 작업이 필요하지만 항상 Functional Interfaces를 사용할 수 있습니다.

@FunctionalInterface 
public interface HTTPRequestHandler { 
    public void completionHandler(Boolean success, String result) throws JSONException, InterruptedException; 

} 

public HttpGetRequest newHTTPRequest(HTTPRequestHandler f) { 
    return new HttpGetRequest(new HttpGetRequest.CustomCallback() { 
     public void completionHandler(Boolean success, String result) throws JSONException, InterruptedException { 
      f.completionHandler(success, result); 
     } 
    }); 
} 

그런 다음 원하는 사용

HttpGetRequest get = newHTTPRequest((success, result) -> { /* Do Stuff */ }); 

기능적 인터페이스는 람다 구문을 허용한다. 불행하게도 CustomCallback은 이미 기능 인터페이스를 구현하지 않으므로 newHTTPRequest 래퍼 기능이 필요합니다.

(I 한동안 자바를 작성하지 않은, 참고. 여기 내 자바 지식이 긴장하고있다. 바라건대 누군가가 당신에게 좋은 대답을 줄 수 있지만, 나는 이것이 더 나은 하나의 부족에 대한 충분 그림.)

+0

유망 해 보입니다. 감사합니다! – dthree

+0

@dthree 나는 몇 잔의 술을 마신 후에 이걸 내 핸드폰에 자유롭게 풀어 줬다. 그것은 작동해야하지만, 어딘가에 오타 또는 두 개를 도입했을 수도 있습니다. 그것이 끝나는 경우 나는 그것을 고칠 것이다. – Carcigenicate

+1

그래서 누가 코드가 HttpGetRequest입니까? 비동기 코드입니까? 그렇지 않다면, 왜 반환 값을 사용하지 않을까요?/ –