2016-10-10 3 views
0

Android에서 ID별로보기를 가져 오는 방법을 다음과 같이 작성했습니다 : 예 :Android : findViewById의 짧은 버전 만들기 - 체크되지 않은 캐스트

Button button = <Button>find(R.id.someId); 

실제로는 < 버튼>은 필요하지 않습니다. 그것은 잘 작동하지만,

protected <T extends View> T find(int id){ 
    return (T) findViewById(id); 
} 

경고 "검사되지 않은 캐스트는"날 귀찮게 : 이 내가 쓴 방법이다. 만약 내가 그걸 어떻게 없앨 수 있니? 이 방법이 저장됩니까? 코 틀린 (Kotlin)에 영감을 받아서 코드를 더 예쁘게 만드는 멋진 작은 방법을 만들고 싶었습니다. 그 Javadocs에,이 지역 변수에 갈 수 따르면

캐스트 등

+4

안녕하세요, 더 예쁜 코드를 원한다면 Jake Wharton이 항상 ButterKnife를 살펴볼 수 있습니다. https://github.com/JakeWharton/butterknife – Lev

+0

와우, 좋네. 나는 그것을 확실히 사용할 것이다. – Sermilion

답변

1

당신은 @SuppressWarnings("unchecked")를 사용하려고 할 수 있습니다, 선택하지 않은 일반적인 작업에 대한 경고 (안 예외) 컴파일 억제하는 주석입니다; 이렇게하면 전체 메서드에 영향을 미치지 않습니다.

1

View가 실제로 안드로이드 수표를 혼동시키는 유형 T인지 여부를 알 수 없기 때문에 경고가 표시됩니다.

왜 당신은 단순히 방법 및 사용 제네릭 캐스트를 피하기 위해

protected View find(int id){ 
    return findViewById(id); 
} 

다음

Button button = (Button)find(R.id.someId); 

하지 않습니다.

이것은 똑같이 짧으며이 경고가 발생하지 않습니다.

+0

요점은 주조를 피하는 것이 었습니다. – Sermilion

+0

당신의 방법에서 당신은 효과적으로 캐스팅도하기 때문에 모든 것을 꽤 무의미하게 만듭니다. 그러나 나는 Butterknife를 사용하도록 권장하는 whith Lev에 완전히 동의합니다. – Slamper

+0

괜찮 았어, 이걸 생각해 냈어 : protected T find (int id, Class ) { return type.cast (findViewById (id)); } – Sermilion

1

나는이 답변에 따라 찾던 함께했다 : 나는 좋은 생각

Button button = find(R.id.someButton, Button.class); 

: 그것은 수 How do I make the method return type generic?

protected <T extends View> T find(int id, Class<T> type){ 
    return type.cast(findViewById(id)); 
} 

나이 같은 뷰를 검색 할 수 있습니다. @Lev 덕분에 JakeWharton/butterknife을 지적 해 주신 덕분에 지금부터 확실히 사용하겠습니다.