Bagaimanakah saya boleh menggabungkan kedua-dua kaedah ini menjadi satu?
Editor PHP Apple akan menjawab soalan anda dalam Java: Bagaimana untuk menggabungkan dua kaedah menjadi satu? Dalam pengaturcaraan Java, kadangkala kita perlu menggabungkan dua kaedah kepada kaedah yang lebih cekap untuk meningkatkan kebolehbacaan dan kecekapan pelaksanaan kod. Dengan kaedah penggabungan, kod pendua boleh dikurangkan, struktur program dipermudahkan, dan kebolehgunaan semula kod dipertingkatkan. Seterusnya, kami akan memperkenalkan langkah pengendalian dan langkah berjaga-jaga khusus untuk membantu anda melaksanakan penggabungan kaedah dan mengoptimumkan reka bentuk program Java dengan cepat.
Kandungan soalan
Saya ada dua kaedah yang hampir sama. Jadi saya ingin mengurangkannya kepada kaedah tetapi saya tidak tahu bagaimana.
Gunakan seperti ini:
mapclassbtoclassa("a list o classb objs", "a list of classa objs"); mapclassctoclassa("a list o classc objs", "a list of classa objs");
Saya nak tukar kepada:
mapclasstoclassa("a list o classb objs", "a list of classa objs"); mapclasstoclassa("a list o classc objs", "a list of classa objs");
Kaedah 1b => a
public void mapclassbtoclassa(list<classb> b, list<classa> a){ comparator<classb> sortfunc = comparator.comparing(classb::getdate); collections.sort(b, sortfunc); for (classa aobj : a){ localdate datea = aobj.getdate(); classb bobjtouse = null; for (classb bobj : b){ localdate dateb = bobj.getdate(); if (dateb.isafter(datea)){ break; } else { bobjtouse = bobj; } } if (bobjtouse != null){ aobj.setclassb(bobjtouse); } } }
Kaedah 2c => a
public void mapclassctoclassa(list<classc> c, list<classa> a){ comparator<classc> sortfunc = comparator.comparing(classc::getdate); collections.sort(c, sortfunc); for (classa aobj : a){ localdate datea = aobj.getdate(); classc cobjtouse = null; for (classc cobj : c){ localdate datec = cobj.getdate(); if (datec.isafter(datea)){ break; } else { cobjtouse = cobj; } } if (cobjtouse != null){ aobj.setclassc(cobjtouse); } } }
Saya mahu melakukan sesuatu yang serupa:
public void mapclasstoclassa(list< **xx** > t, list<classa> a){ comparator< **xx** > sortfunc = comparator.comparing( **xx** ::getdate); collections.sort( t , sortfunc); for (classa aobj : a){ localdate datea = aobj.getdate(); **xx** objtouse = null; for (**xx** obj : t){ localdate datet = obj.getdate(); if (datet.isafter(datea)){ break; } else { objtouse = bobj; } } if (objtouse != null){ aobj.setclassxxx(objtouse); } } }
Saya cuba menggunakan generik
public <t> void maptoarende(list<t> t, list<classa> a){ ... t objtouse = null;
Tetapi ini:
Saya tidak dapat melaksanakan komparator kerana ini tidak berfungsi
comparator.comparing(t::getfromdat);
Salin selepas log masukDaripada panggilan ke obj.getdate(), di sini saya menemui penyelesaian menggunakan refleksi, tetapi orang ramai menasihatkannya. Tetapi ia berfungsi. apa yang saya buat?
Method m = obj.getClass().getMethod("getDate"); LocalDate dateT = (LocalDate) m.invoke(obj);
Salin selepas log masukSaya tidak tahu bagaimana untuk memanggil aobj.setclassxxx() kerana nama kaedah classb dan classc adalah berbeza
Saya telah membaca tentang lambda tetapi saya mengalami sedikit kesukaran untuk memahami cara menggunakannya.
Penyelesaian
Jika anda tidak boleh menambah antara muka biasa pada kelas ini, anda boleh menambah beberapa fungsi pada parameter kaedah:
public <t> void mapclasstoclassa(list<t> t, list<classa> a, function<t, localdate> dategetter, biconsumer<classa, t> setter) { comparator<t> sortfunc = comparator.comparing(dategetter); collections.sort(t, sortfunc); for (classa aobj : a) { localdate datea = aobj.getdate(); t ttouse = null; for (t tobj : t){ localdate datet = dategetter.apply(tobj); if (datet.isafter(datea)){ break; } ttouse = tobj; } setter.accept(aobj, tobjtouse); } }
Panggilan adalah seperti berikut:
mapclasstoclassa(b, a, classb::getdate, classa::setclassb); mapclasstoclassa(c, a, classc::getdate, classa::setclassc);
Itulah gunanya antara muka, bukan?
public interface dated { localdate getdate(); } public class classb implements dated { ... } public class classc implements dated { ... }
Untuk setter boleh guna instanceof
.
public void mapClassBToClassA(List<? extends Dated> b, List<ClassA> a){ Comparator<Dated> sortFunc = Comparator.comparing(Dated::getDate); Collections.sort(b, sortFunc); for (ClassA aObj : a){ LocalDate dateA = aObj.getDate(); Dated datedToUse = null; for (Dated bObj : b){ LocalDate dateB = bObj.getDate(); if (dateB.isAfter(dateA)){ break; } else { datedToUse = bObj; } } if (datedToUse instanceOf ClassB bObjToUse) { aObj.setClassB(bObjToUse); } else if (datedToUse instanceOf ClassC cObjToUse) { aObj.setClassC(cObjToUse); } } }
Atas ialah kandungan terperinci Bagaimanakah saya boleh menggabungkan kedua-dua kaedah ini menjadi satu?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas









