Ниже приведен пример Обобщения в kotlin
Первый созданный пользовательский класс pojo с именем Product:
public class Product implements Serializable {
int id;
String mName;
public Product(int id, String mName) {
this.id = id;
this.mName = mName;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getmName() {
return mName;
}
public void setmName(String mName) {
this.mName = mName;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Product product = (Product) o;
return id == product.id;
}
@Override
public int hashCode() {
return Objects.hash(id);
}
}
Затем добавьте приведенный ниже код в метод onCreate ():
val p1 = Product(1, "abc")
val p2 = Product(2, "abc")
val p3 = Product(3, "abc")
val p4 = Product(4, "abc")
val p5 = Product(5, "abc")
val p11 = Product(1, "abc")
val p22 = Product(12, "sdg")
val p33 = Product(3, "xfg")
val p44 = Product(14, "pqr")
val p55 = Product(5, "fhtryt")
val mProduList1 = ArrayList<Product>()
val mProduList2 = ArrayList<Product>()
mProduList1.add(p1)
mProduList1.add(p2)
mProduList1.add(p3)
mProduList1.add(p4)
mProduList1.add(p5)
mProduList2.add(p11)
mProduList2.add(p22)
mProduList2.add(p33)
mProduList2.add(p44)
mProduList2.add(p55)
equalLists(mProduList1, mProduList2)
Затем создайте универсальную функцию, названную «equalLists»:
public fun equalLists(one: ArrayList<*>?, two: ArrayList<*>?): Boolean {
if (one == null && two == null) {
return true
}
if (one == null && two != null || one != null && two == null || one?.size != two?.size) {
return false
}
val oneCopy = ArrayList(one)
val twoCopy = ArrayList(two)
sortProduct(oneCopy)
sortProduct(twoCopy)
return one == two
}
Затем создайте новую функцию, которая будет приводить универсальный тип к продукту, а затем сортировать их:
private fun sortProduct(dummyCopy: ArrayList<Any>) {
(dummyCopy as ArrayList<Product>).sortWith(object: Comparator<Product>{
override fun compare(p1: Product, p2: Product): Int = when {
p1.id > p2.id -> 1
p1.id == p2.id -> 0
else -> -1
}
})
for(i in dummyCopy){
Log.e("tagMine", "i.id is " + i.id + " i.mName " + i.mName)
}
}
Чтобы определить универсальную функцию, мы можем выбрать одну из следующих, например, использовать «<*>
» или «fun<T>
», как показано ниже:
1) public fun equalLists(one: ArrayList<*>?, two: ArrayList<*>?): Boolean {
2) fun<T> equalLists(one: ArrayList<T>?, two: ArrayList<T>?): Boolean {