2014-10-21 2 views
-3

모든 목록 <을 개체 목록 []으로 변형 할 수 있기를 원합니다. 즉, 주어진 목록의 모든 요소는 지정된 방식으로 개체 배열로 변형되어야합니다. 예를 들어모든 목록을 목록으로 변환 <Object[]>

, 나는

Function <User, Object[]> mapper = 
          user -> new Object[] {user.getUserId(), user.getUserName()} 

List<User> users = 
     Lists.newArrayList(new User((long) 1, "Name1"), new User ((long) 2, "Name2")); 

과 기능을 가지고 그리고 매퍼와 모든 사용자를 변환하여, 객체 배열의 목록을 얻을 필요가있다. 그러나 요점은 함수를 작성하는 것입니다.이 함수는 주어진 목록 및 주어진 매퍼에서 작동 할 수 있습니다.

나는 변압기 클래스를 생성하고 다음 방법으로 내 목표를 달성하기 위해 노력했지만 컴파일 오류가 발생했습니다 :

당신이 내게 줄 수있는 어떤 조언
class Transformer {  
    private List<?> content; 
    private Function<?, Object[]> mapper; 
    //getters and setters 
    .... 
    public List<Object[]> transform() { 
     return content.stream() 
         .map(mapper) // this row isn't compiled 
         .collect(Collectors.toList()); 
    } 
} 



Error:(75, 45) java: method map in interface java.util.stream.Stream<T> cannot be applied to given types; 
required: java.util.function.Function<? super capture#1 of ?,? extends R> 
found: java.util.function.Function<capture#2 of ?,java.lang.Object[]> 
reason: cannot infer type-variable(s) R 
(argument mismatch; java.util.function.Function<capture#2 of ?,java.lang.Object[]> cannot be converted to java.util.function.Function<? super capture#1 of ?,? extends R>) 

?

+2

어떤 오류가 발생 했습니까? – Eran

+0

Error : (75, 45) java : interface java.util.stream.Stream의 메소드 맵 는 지정된 타입에 적용 할 수 없습니다. 필수 : ​​java.util.function.Function 발견 : java.util.function.Function 이유 : 형식 변수를 추론 할 수 없습니다. R (인수 불일치; java.util.function .Function 의 캡쳐 # 2는 java.util.function.Function으로 변환 될 수 없습니다.?,? extends R>) –

+1

@ funny-funny 댓글로 게시하십시오. 이 정보는 질문과 관련이 있으므로 [편집]하고이 정보를 포함시켜야합니다. – Pshemo

답변

1
class Transformer {  
    private List<?> content; 
    private Function<?, Object[]> mapper; 

정말 이와 같은 와일드 카드를 사용할 수 없습니다. 당신은 정말 비록 당신이 여기 사용하여 심각한 디자인 냄새 것 같은 Object[]을 사용하여 가치가 무엇을 ...

class Transformer<T> { 
    private List<T> content; 
    private Function<T, Object[]> mapper; 

처럼 보이는 뭔가를 쓸 필요가 없습니다.

+0

코드 서식을 수정하기위한 공간을 추가하십시오. 'smmell'에서 'm'을 제거하십시오. (그것은 단지 두 글자이므로 고칠 수는 없습니다.) –

+0

일반적인 클래스 사용을 피할 수있는 방법이 있습니까? –

+1

왜 일반 클래스 사용을 피하기를 원하십니까? 이것이 유형 안전을 얻는 방법입니다. –

관련 문제