Тема: Дженерики. Несумісність сумістних об'єктів
Вітаю!
Виникла складність з дженеріком так як не докінця їх розумію.
Програма виконується по плану, але зупиняюсь на тому, що не можу описати далі код так як типи невідповідні. В методі blockView класу TovarListBild який наслідується з класу MyBildActivity я отримаю потрібний мені об'єкт типу ServerTovarList (який наслідує ServerAnswer) в коді він записаний як обєкт типу ServerAnswer. Як правельно описати метод TovarListBild.blockView() щоб в ньому опрацьовувати результат вже як тип ServerTovarList.
Клас де є проблема:
public class TovarListBild extends MyBildActivity {
TovarListBild(){ super(); }
ServerTovarList stl;
@Override
public void blockView( ServerAnswer sc) {
System.out.println("work");
System.out.println("serverAnswer = " + sc);//влогах отримаю "serverAnswer = com.example.test.conect.ServerTovarList@e33c141" те що і потрібно мені.
//але неможу записати це в такій формі.
ServerTovarList stl = sc;//ПОМИЛКА!!! - Incompatible types. Found: 'com.example.test.conect.ServerAnswer', required: 'com.example.test.conect.ServerTovarList'
}
}
Все починається з цього класу:
public class TovarListActivity extends AppCompatActivity {
User user;
Context context = this;
TovarListActivity TLA = TovarListActivity.this;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_tovar_list);
user = new User(getSharedPreferences("User", MODE_PRIVATE));
ArrayList<String> otherParam = new ArrayList<String>();
otherParam.add("");
TovarListBild tlb = new TovarListBild();
tlb.bild(TLA, context, user.getUserUrlIndentificator(), "tovar_list", otherParam);
}
}
Клас який наслідує клас TovarListBild
public abstract class MyBildActivity<PA extends AppCompatActivity, SC extends ServerAnswer> {
Context context;
String user;
MyBildActivity mba = MyBildActivity.this;
PA PA;//parent activity //посилання на бітьківський обєкт
MyError myError;
SC sc;
public void bild(PA PA, Context context, String user, String nameGetId, ArrayList<String> parametrs){
... запит на сервер ...
}
//даний метод запускається коли сервер відповідає
public void resultServer(SC sc){
this.sc = sc;
if (sc.conectStatus){ blockView(this.sc); }else{ /*error*/ }
}
public abstract void blockView(SC sc);
}