2014-11-18 3 views
2

하나의 매개 변수를 사용하는 메소드가 있다고 가정 해 보겠습니다.
이 매개 변수는 다음과 같은 요구 사항을 충족해야합니다Java 메소드 매개 변수 유형 및 인터페이스 규정

는 '유형의'
  • : 방법은 매개 변수가 특정 클래스 (또는 서브 클래스)의 것을 알 필요가있다.
  • 'implements interface':이 메서드는 매개 변수가 특정 인터페이스를 구현하는지 알아야합니다.

저는 iOS 개발에서 왔습니다. 목표 C에서, 우리는 같은 것을 쓸 수 있습니다 :

의미
- (void)theMethod:(aClass<aProtocol> *)parameter 

: 매개 변수의 클래스가 'aClass'(또는 그 서브 클래스)이며이 'aProtocol'구현합니다.
그래서 메서드 내에서 클래스와 프로토콜의 메서드를 모두 안전하게 호출 할 수 있습니다 (개체가 요구 사항과 일치하지 않으면 컴파일러에서 경고합니다).

Java에서 이러한 메소드 서명을 어떻게 얻을 수 있습니까? 심지어 가능할까요? 어쩌면 더 구체적인 예는 내가 찾고 무엇을 보여줄 수


: 내 안드로이드 응용 프로그램의

, 난의 GridView에 DataItem의를 표시합니다. 배열 DataItem을 통해보기를 채우는 GridViewAdapter 있습니다.

DataItem은 여러 개의 하위 클래스가 있으며 직접 사용되지는 않지만 하위 클래스의 공통 인터페이스를 정의하기 때문에 다소 추상적입니다.

GridView에는 모두 DataItems이 표시 될 수있는 것은 아니므로 어댑터로 GridView에 표시하려면 GridViewItem 인터페이스가 있어야합니다.

현재 GridViewAdapter의 기본 생성자는 다음과 같습니다.
public GridViewAdapter(ArrayList<GridViewItem> items).

내가 원하거나 원하는 것은
public GridViewAdapter(ArrayList<[DataItem (or subclass) conforming to GridViewItem]>입니다.

어댑터가 GridViewItem을 준수하는 DataItem만을 사용하는지 확인해야합니다.

답변

2

(또한 인터페이스 Protocol를 구현하는 것) SomeClass의 서브 클래스를 취할 수 있습니다, 무엇을 찾고있는 것은 여러 경계가있는 유형 매개 변수입니다.

public <T extends DataItem & GridViewItem> GridViewAdapter (ArrayList<T> items) 
{ 

} 

또는 당신은 클래스 선언의 형식 매개 변수를 이동할 수 있습니다

public class GridViewAdapter <T extends DataItem & GridViewItem> 
{ 
    public GridViewAdapter (ArrayList<T> items) 
    { 

    } 
} 
+0

완벽! 덕분에이 작품은 나를 위해 :) – Cabus

1

매개 변수의 클래스는 'aClass'(또는 그 하위 클래스)이며 'aProtocol'을 구현합니다.

기준을 충족하는 유형을 정의 할 수 있습니다.

다음
public interface Protocol { 
    //abstract method(s) 
} 

public class SomeClass implements Protocol { 
    //implementations 
} 

, 당신의 메소드 서명은 다음과 같습니다

public void theMethod(SomeClass parameter) { 
    //implementation 
} 

theMethod() 내가 제대로 이해하면

+0

덕분에 당신의 대답. 이 문제는 내가 DataView 클래스의 계층 구조가 'GridView'경로에 '잠겨'있기 때문에 ListViews에 대해 똑같은 작업을 수행하는 'ListViewItem'인터페이스를 도입해야 할 때 그럴 수 없다는 것입니다. – Cabus