2016-06-03 1 views
0

다음 클래스에서 구현 한 다음 인터페이스가 있습니다.메서드 체이닝으로 인해 호출되지 않은 경고가 발생합니다.

public interface IFilteredDataService<B extends Bean> extends IDataService<B> 
{ 
    FilteredDataService applyFilter(Predicate<B> filter); 
} 

public class FilteredDataService<B extends Bean> implements IFilteredDataService<B> 
{ 
    @Override 
    public FilteredDataService addFilter(Predicate<B> filter) 
    { 
     filters.add(filter); 
     return this; 
    } 
} 

내가 AddFilter를를 사용하는 방법) (: 나는이 AddFilter를() 메소드의 마지막에 "반환이"추가 이유는이 클래스를 들면, 나는이 방법 체인을 사용할 수 있도록하고 싶습니다, 이는 다음과 같은 방법으로, 모든 것이 괜찮 :

someInstance.addFilter(foo); 
someInstance.addFilter(bar); 

나는 방법은 다음과 같이 체인을 사용하는 경우 :

someInstance.addFilter(foo).addFilter(bar); 

여전히 잘 작동하지만 나는 다음과 같은 경고를 얻을 :

Unchecked call to 'addFilter(Predicate<B>)' as a member of raw type 'FilteredDataService'. 

왜 이런 일이 일어나고 제거하는 방법을 알 수 없었습니다. 어떤 도움이라도 대단히 감사하겠습니다.

답변

2

반환 값에 일반 정보가 누락되어 (일반이 아닙니다) FilteredDataService을 반환합니다.

제네릭을 유지하려면 public FilteredDataService<B> addFilter(Predicate<B> filter)을 사용하십시오.

0

일반 및 체인이 방법을 사용하려면 Kayaman이 작성한대로 완전 일반 방법 (반환 포함)을 만들어야합니다. 그리고 무엇을 얻는 지 살펴보십시오.

원시 유형 'FilteredDataService'의 멤버로 'addFilter (Predicate)'를 선택하지 않은 것이 확인되었습니다. 간단한 번역

: 당신은 일반적인 PARAM (AddFilter를 (술어 필터))를 받아 들여야 방법을 요구하고 있지만 체인 중 제네릭이 아닌 PARAM을 보내고있다 (이 반환 = FilteredDataService -> 비 일반). 명확히하기 위해 : o)

관련 문제