Android 앱에 어댑터가 있는데 Generic으로 만들고 싶습니다. 방법은 DataTypeC
매개 변수를 받아야 할 때 내가 다른 오류를 받고 있어요 내가 그것을 매개 변수 유형을 통과Java에서 제네릭을 사용하도록 사용자 지정 어댑터를 변환하십시오.
public class myAdapter extends FragmentStatePagerAdapter {
DataTypaA myFragment;
DataTypeB data;
DataTypeC items;
public myAdapter(FragmentManager fm, DataTypaA fragment) {
data = new SparseArray<DataTypeB>();
myFragment = fragment;
items = myFragment.getData();
}
public DataTypeB getItem(int position) {
return data.get(position);
}
@Override
public int getCount() {
return items.getList().size();
}
public void setData() {
items = myFragment.getItems() //getItems return DataTypeC
data.setTheData (items)
}
}
내가 일반적인
public class myAdapter <A,B,C> extends FragmentStatePagerAdapter {
A myFragment;
B data;
C items;
public myAdapter(FragmentManager fm, A fragment) {
data = new SparseArray<B>();
myFragment = fragment;
items = (C) myFragment.getData();
}
public B getItem(int position) {
return data.get(position);
}
@Override
public int getCount() {
return items.getList().size();
}
public void setData() {
items = myFragment.getItems() //getItems return DataTypeC
data.setTheData (items)
}
}
로 변경되었지만 :
Basiclly 어댑터는 같다 C
(data.setTheData (items)
)은 실제로 형식이 DataTypeC
이고 C
을 DataTypeC
으로 변환합니다. 그리고 getCount()
에서 items
을 DataTypeC
으로 변환하는 중 오류가 발생했습니다.
예를 들어 getItem을 오버라이드하려고 할 때 실수가 발생하지만 동일한 이름의 메소드를 만들면 컴파일됩니다.
//Error - "The return type is incompatible with FragmentStatePagerAdapter.getItem(int)"
@Override
public B getItem(int position) {
return (B) data.get(position);
}
//compiles
public B getItemTest(int position) {
return data.get(position);
}
모든 아이디어를 어떻게 수정하여 100 % 일반일까요?
는 추가 : 나는 물론 <T>
의 실행 및 <C>
가 동일한 경우
public class TypeA <T> {
private T mData;
public T getData() { return mData;; }
}
public class myAdapter <A,B,C> extends FragmentStatePagerAdapter {
A myFragment;
B data;
C items;
public myAdapter(FragmentManager fm, A fragment) {
data = new SparseArray<B>();
myFragment = fragment;
items = myFragment.getData(); //Error - The method getData() is undefined for the type T
}
}
내가 ... 오류를 컴파일 받고 있어요 : 당신의 대답 나는 변경 후에는 제네릭 형식의 복귀를 지원하기 위해 유형. "genericizing"클래스, 당신은 제네릭에 의해 genericized 유형의 모든 인스턴스를 교체해야
왜 당신이 일반적인 만들고 싶어합니까 : 나는 가짜 클래스를 사용이를 위해
: 최종 구현 는과 같이 갈 수있다? 유스 케이스를 제공 할 수 있습니까? 달성하고자하는 것은 분명하지 않습니다 (또는 적어도 저에게) :'data'는'DataTypeB' 또는'SparseArray' 타입입니까? –
Matthieu
@Matthieu'data'는 타입'B'입니다. 실수였습니다, 고마워요 ...이 어댑터는 다른 클래스에 그것의 사용법을 알려주고 싶다면' '코드를 복사하고 새 어댑터를 만들지 않습니다. –
Alex, 게시하기 전에 코드가 의미 있는지 확인해야합니다. 비 제너릭 코드는 전혀 컴파일되지 않으므로 현명한 권고를하기가 어렵습니다. –