Jadual Kandungan
Kandungan soalan
Penyelesaian
Rumah Java Bagaimanakah saya boleh menggabungkan kedua-dua kaedah ini menjadi satu?

Bagaimanakah saya boleh menggabungkan kedua-dua kaedah ini menjadi satu?

Feb 22, 2024 pm 01:28 PM

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");
Salin selepas log masuk

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");
Salin selepas log masuk

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);
      }
   }
}
Salin selepas log masuk

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);
      }
   }
}
Salin selepas log masuk

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);
      }
   }
}
Salin selepas log masuk

Saya cuba menggunakan generik

public <t> void maptoarende(list<t> t, list<classa> a){
        ...
           t objtouse = null;
Salin selepas log masuk

Tetapi ini:

  • Saya tidak dapat melaksanakan komparator kerana ini tidak berfungsi

    comparator.comparing(t::getfromdat);
    Salin selepas log masuk
  • Daripada 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 masuk
  • Saya 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);
    }
}
Salin selepas log masuk

Panggilan adalah seperti berikut:

mapclasstoclassa(b, a, classb::getdate, classa::setclassb);
mapclasstoclassa(c, a, classc::getdate, classa::setclassc);
Salin selepas log masuk

Itulah gunanya antara muka, bukan?

public interface dated {
  localdate getdate();
} 

public class classb implements dated {
  ...
}

public class classc implements dated {
  ...
}
Salin selepas log masuk

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);
      }
   }
}
Salin selepas log masuk

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!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

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

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Tutorial Java
1662
14
Tutorial PHP
1261
29
Tutorial C#
1234
24