Middle
İnkişaf təcrübənizdə harada generiklərdən istifadə etdiniz?
sobes.tech Süni İntellekt
AI-dan cavab
Növçülükdən istifadə etdi:
- Tip təhlükəsiz kolleksiyaların həyata keçirilməsi üçün. Məsələn,
ArrayList<MyObject>yerinə xamArrayLististifadə etmək, tipə görə çevirmə ilə əlaqəli səhvlərin qarşısını alır.// Tip təhlükəsiz olmayan yanaşma (xam tip) List list = new ArrayList(); list.add("Sətir"); list.add(123); // int əlavə edir // Növ təhlükəsiz yanaşma ilə növçülük List<String> stringList = new ArrayList<>(); stringList.add("Sətir"); // stringList.add(123); // Kompilyator səhv verəcək - RecyclerView üçün ümumi adapterlərin yaradılması üçün. Müxtəlif məlumat tipləri üçün adapter loqikasını təkrar istifadə etməyə imkan verir.
// Ümumi ViewHolder nümunəsi class GenericViewHolder<T>(itemView: View) : RecyclerView.ViewHolder(itemView) { fun bind(item: T) { // T tipindən asılı olaraq məlumatların bağlanması loqikası } } // Ümumi adapter nümunəsi class GenericAdapter<T>(private val items: List<T>) : RecyclerView.Adapter<GenericViewHolder<T>>() { override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): GenericViewHolder<T> { // ViewHolder yaradılması } override fun onBindViewHolder(holder: GenericViewHolder<T>, position: Int) { holder.bind(items[position]) } override fun getItemCount() = items.size } - Obyekt fabriklərinin yaradılmasında. Konkret obyekt tipini açıq çevirmədən almaq üçün.
interface Factory<T> { T create(); } class StringFactory : Factory<String> { override fun create(): String { return "Yeni sətir"; } } class IntegerFactory : Factory<Int> { override fun create(): Int { return 100; } } Factory<String> stringFactory = StringFactory(); val myString: String = stringFactory.create(); // Çevirmədən String əldə edilir - Metodlar və siniflərdə tiplərin məhdudlaşdırılması üçün. Məhdudlaşdırılmış növçülük istifadə edilir (
<T extends MyInterface>və ya<T super MyClass>) və bu, növçülük tipinin müəyyən interfeysi həyata keçirməsini və ya müəyyən sinifdən irs almağını təmin edir.// Serializable interfeysini həyata keçirən elementlər siyahısını qəbul edən metod public <T extends Serializable> void saveObjectList(List<T> list) { // Yadda saxlamanın loqikası } - Memarlıq komponentlərində. Məsələn, LiveData və ya ViewModel ilə işləyərkən, tez-tez idarə etdikləri məlumat tiplərini müəyyən etmək üçün növçülük istifadə olunur.
// Müəyyən tipdə obyektlərin siyahısı üçün LiveData val myData: LiveData<List<MyItem>> = // başlanğıc // Müəyyən tipdə məlumatlara malik ViewModel class MyViewModel : ViewModel() { val data: MutableLiveData<MyStateType> by lazy { MutableLiveData<MyStateType>() } } - Şəbəkə müştərilərinin hazırlanmasında. Serverdən alınan cavabların konkret tiplərə avtomatik deserializasiyası üçün.
// Retrofit servisi nümunəsi və növçülük ilə cavab interface ApiService { @GET("users") Call<List<User>> getUsers(); @GET("products/{id}") Call<Product> getProduct(@Path("id") String productId); }
Növçülük kodun tip təhlükəsizliyini, oxunaqlığını və təkrar istifadə imkanlarını əhəmiyyətli dərəcədə artırdı.