JavaRush /Blog Jawa /Random-JV /Konstruktor kelas. Jawa JDK 1.5
articles
tingkat

Konstruktor kelas. Jawa JDK 1.5

Diterbitake ing grup
Konstruktor kelas.  Jawa JDK 1.5 - 1

Informasi umum babagan konstruktor

Конструкторminangka struktur sing padha karo metode, tujuane kanggo nggawe conto kelas. Karakteristik desainer:
  • Jeneng konstruktor kudu cocog karo jeneng kelas (miturut konvensi, huruf pisanan dikapitalisasi, biasane tembung jeneng);
  • Ana konstruktor ing sembarang kelas. Malah yen sampeyan ora nulis siji, compiler Jawa bakal nggawe konstruktor standar, kang bakal kosong lan nindakake apa-apa liyane saka nelpon konstruktor superclass.
  • A konstruktor padha karo cara, nanging ora cara, iku ora malah dianggep minangka anggota saka kelas. Mulane, ora bisa diwarisake utawa diganti ing subclass;
  • Konstruktor ora diwarisake;
  • Bisa uga ana sawetara konstruktor ing kelas. Ing kasus iki, konstruktor ngandika overloaded;
  • Yen kelas ora nemtokake konstruktor, compiler otomatis nambah konstruktor parameterless kanggo kode;
  • Konstruktor ora duwe jinis bali; malah ora bisa dadi jinis void; yen jinis bali void, mula ora dadi konstruktor nanging cara, sanajan ana kebetulan karo jeneng kelas.
  • Operator diijini ing konstruktor return, nanging mung kosong, tanpa nilai bali;
  • Konstruktor ngidini nggunakake modifiers akses; sampeyan bisa nyetel salah siji modifiers: public, protected, privateutawa tanpa modifier.
  • A konstruktor ora bisa duwe modifiers abstract, final, native, staticutawa synchronized;
  • Tembung kunci thisnuduhake konstruktor liyane ing kelas sing padha. Yen digunakake, telpon kanggo iku kudu baris pisanan konstruktor;
  • Tembung kunci kasebut superdiarani konstruktor kelas induk. Yen digunakake, referensi kanggo iku kudu baris pisanan konstruktor;
  • Yen konstruktor ora nelpon kanggo superkonstruktor kelas leluhur (nganggo utawa tanpa bantahan), compiler otomatis nambah kode kanggo nelpon konstruktor kelas leluhur tanpa bantahan;

Konstruktor standar

Ana konstruktor ing sembarang kelas. Sanajan sampeyan ora nulis, kompiler Java bakal nggawe konstruktor standar. Konstruktor iki kosong lan ora nindakake apa-apa kajaba nelpon konstruktor superclass. Sing. yen sampeyan nulis:
public class Example {}
banjur iki padha karo nulis:
public class Example
{
     Example()
     {
          super;
     }
}
Ing kasus iki, kelas leluhur ora ditemtokake sacara eksplisit, lan minangka standar, kabeh kelas Jawa nduweni warisan kelas, Objectmula konstruktor kelas kasebut diarani Object. Yen kelas nemtokake konstruktor karo paramèter, nanging ora ana konstruktor overloaded tanpa paramèter, banjur nelpon konstruktor tanpa paramèter iku kesalahan. Nanging, ing Jawa wiwit versi 1.5, sampeyan bisa nggunakake konstruktor kanthi argumen dawa variabel. Lan yen ana konstruktor sing nduweni argumen dawa variabel, banjur nelpon konstruktor standar ora bakal dadi kesalahan. Ora bakal amarga argumen dawa variabel bisa kosong. Contone, conto ing ngisor iki ora bakal kompilasi, nanging yen sampeyan uncomment konstruktor karo argumen dawa variabel, bakal ngumpulake lan mbukak kasil lan asil ing baris kode mlaku DefaultDemo dd = new DefaultDemo(); konstruktor bakal disebut DefaultDemo(int ... v). Alami, ing kasus iki perlu nggunakake JSDK 1.5. FileDefaultDemo.java
class DefaultDemo
{
 DefaultDemo(String s)
 {
  System.out.print("DefaultDemo(String)");
 }
 /*
 DefaultDemo(int ... v)
 {
  System.out.println("DefaultDemo(int ...)");
 }
 */

 public static void main(String args[])
 {
  DefaultDemo dd = new DefaultDemo();
 }
}
Asil saka output program karo konstruktor uncommented:
DefaultDemo(int ...)
Nanging, ing kasus umum ing ngendi kelas ora nemtokake konstruktor apa wae, nelpon konstruktor standar (tanpa paramèter) perlu, amarga substitusi konstruktor standar dumadi kanthi otomatis.

Nggawe obyek lan konstruktor

Nalika nggawe obyek, tumindak ing ngisor iki ditindakake kanthi urutan:
  • Kelas obyek digoleki ing antarane kelas sing wis digunakake ing program kasebut. Yen ora ana, banjur digoleki ing kabeh katalog lan perpustakaan sing kasedhiya kanggo program kasebut. Sawise kelas ditemokake ing direktori utawa perpustakaan, lapangan statis kelas digawe lan diwiwiti. Sing. Kanggo saben kelas, kolom statis diinisialisasi mung sapisan.
  • Memori diparengake kanggo obyek.
  • Kolom kelas lagi diwiwiti.
  • Konstruktor kelas dieksekusi.
  • Link menyang obyek sing digawe lan diinisialisasi dibentuk. Referensi iki minangka nilai ekspresi sing nggawe obyek kasebut. Objek uga bisa digawe kanthi nelpon metode newInstance()kelas java.lang.Class. Ing kasus iki, konstruktor tanpa dhaptar parameter digunakake.

Overloading konstruktor

Konstruktor kelas sing padha bisa duwe jeneng sing padha lan teken beda. Sifat iki diarani kombinasi utawa overloading. Yen kelas duwe pirang-pirang konstruktor, mula ana overloading konstruktor.

Parameterized Konstruktor

Tandha saka konstruktor yaiku nomer lan jinis paramèter, uga urutan jinis ing dhaptar paramèter konstruktor. Jinis bali ora dijupuk menyang akun. Konstruktor ora ngasilake paramèter. Pernyataan iki nerangake, kanthi cara, carane Jawa mbedakake antarane konstruktor utawa metode sing kakehan. Jawa mbedakake cara kakehan ora saka jinis bali, nanging dening nomer, jinis, lan urutan jinis paramèter input. Konstruktor ora bisa ngasilake jinis void, yen ora, bakal dadi cara biasa, sanajan padha karo jeneng kelas. Conto ing ngisor iki nuduhake iki. FileVoidDemo.java
class VoidDemo
{
 /**
  * Это конструктор
  */
 VoidDemo()
 {
  System.out.println("Constructor");
 }

 /**
  * А это уже обычный метод, даже не смотря на сходство с
  * именем класса, поскольку имеется возвращаемый тип void
  */
 void VoidDemo()
 {
  System.out.println("Method");
 }

 public static void main(String s[])
 {
  VoidDemo m = new VoidDemo();
 }
}
Akibaté, program bakal ngasilake:
Constructor
Iki maneh mbuktekake manawa konstruktor minangka metode tanpa parameter bali. Nanging, konstruktor bisa diwenehi salah siji saka telung modifiers public, , privateutawa protected. Lan conto saiki bakal katon kaya iki: FileVoidDemo2.java
class VoidDemo2
{
 /**
  * Это конструктор
  */
 public VoidDemo2()
 {
  System.out.println("Constructor");
 }

 /**
  * А это уже обычный метод, даже не смотря на сходство с
  * именем класса, поскольку имеется возвращаемый тип void
  */
 private void VoidDemo2()
 {
  System.out.println("Method");
 }

 public static void main(String s[])
 {
  VoidDemo2 m = new VoidDemo2();
 }
}
Diijini nulis operator ing konstruktor return, nanging mung kosong, tanpa nilai bali. FileReturnDemo.java
class ReturnDemo
{
 /**
  * В конструкторе допускается использование оператора
  * return без параметров.
  */
 public ReturnDemo()
 {
  System.out.println("Constructor");
  return;
 }

 public static void main(String s[])
 {
  ReturnDemo r = new ReturnDemo();
 }
}

Konstruktor parameterized karo argumen variabel-dawa

Java SDK 1.5 ngenalake alat sing ditunggu-tunggu - argumen variabel dawa kanggo konstruktor lan metode. Sadurunge, macem-macem dokumen diproses kanthi rong cara sing ora trep. Pisanan mau dirancang kanggo mesthekake yen jumlah maksimum bantahan diwatesi kanggo nomer cilik lan dikenal ing advance. Ing kasus iki, iku bisa kanggo nggawe versi overloaded saka cara, siji kanggo saben versi dhaftar argumen liwati cara. Cara liya dirancang kanggo soko sing ora dingerteni sadurunge lan akeh argumen. Ing kasus iki, argumen diselehake ing array, lan array iki diterusake menyang metode kasebut. Argumen dawa variabel paling kerep melu manipulasi sakteruse karo initializations variabel. Iku trep kanggo ngganti anané sawetara saka konstruktor samesthine utawa bantahan cara karo nilai gawan. Argumen dawa variabel minangka array, lan dianggep minangka array. Contone, konstruktor kanggo kelas Checkingkanthi nomer variabel argumen bakal katon kaya iki:
class Checking
{
 public Checking(int ... n)
 {
 }
}
Kombinasi karakter ... ngandhani compiler yen nomer variabel argumen bakal digunakake, lan argumen kasebut bakal disimpen ing array sing nilai referensi ana ing variabel n. Konstruktor bisa diarani kanthi macem-macem argumen, kalebu ora ana argumen. Argumentasi kanthi otomatis diselehake ing larik lan liwati n. Yen ora ana argumen, dawane array yaiku 0. Dhaptar parameter, bebarengan karo argumen dawa variabel, bisa uga kalebu parameter wajib. Ing kasus iki, parameter sing ngemot nomer variabel argumen kudu dadi sing pungkasan ing dhaptar parameter. Tuladhane:
class Checking
{
 public Checking(String s, int ... n)
 {
 }
}
Watesan sing jelas banget babagan jumlah parameter dawa variabel. Mesthine mung siji parameter dawa variabel ing dhaptar parameter. Diwenehi loro paramèter variabel-dawa, iku mokal kanggo compiler kanggo nemtokake ngendi siji parameter ends lan liyane wiwit. Tuladhane:
class Checking
{
 public Checking(String s, int ... n, double ... d) //ОШИБКА!
 {
 }
}
File Checking.java Contone, ana peralatan sing bisa ngenali plat mobil lan ngelingi nomer kothak ing wilayah ngendi saben mobil dibukak sak dina. Sampeyan kudu milih saka massa total mobil direkam sing sak dina dibukak loro kothak diwenehi, ngandika 22 lan 15, miturut peta wilayah. Iku cukup alam sing mobil bisa ngunjungi akeh kothak sak dina, utawa mung siji. Temenan, jumlah kothak sing dibukak diwatesi kanthi kacepetan fisik mobil. Ayo nggawe program cilik ngendi konstruktor kelas bakal njupuk minangka bantahan nomer mobil minangka parameter prentah lan nomer kothak dibukak saka wilayah, nomer kang bisa mawarni-warni. Konstruktor bakal mriksa apa mobil wis katon ing rong kothak; yen wis, banjur nuduhake nomer ing layar.

Maringake paramèter menyang konstruktor

Ana rong jinis paramèter ing basa pamrograman:
  • jinis dhasar (primitif);
  • referensi kanggo obyek.
Istilah panggilan kanthi nilai tegese konstruktor nampa nilai sing diterusake dening modul panggilan. Ing kontras, nelpon kanthi referensi tegese konstruktor nampa alamat variabel saka panelpon. Jawa mung nggunakake telpon miturut nilai. Miturut nilai parameter lan nilai pranala parameter. Jawa ora nggunakake telpon kanthi referensi kanggo obyek (sanajan akeh programer lan penulis sawetara buku ngaku iki). Nalika ngirim obyek menyang Jawa, paramèter ora liwati kanthi referensi , nanging kanthi nilai referensi obyek ! Ing kasus apa wae, konstruktor nampa salinan nilai kabeh paramèter. Konstruktor ora bisa nindakake karo paramèter input:
  • konstruktor ora bisa ngganti nilai paramèter input saka jinis utama (primitif);
  • konstruktor ora bisa ngganti referensi parameter input;
  • konstruktor ora bisa reassign referensi parameter input kanggo obyek anyar.
Konstruktor bisa nindakake karo paramèter input:
  • ngganti negara obyek liwati minangka parameter input.
Conto ing ngisor iki mbuktekake manawa ing Jawa, paramèter input menyang konstruktor dilewati kanthi nilai referensi obyek. Conto iki uga nuduhake yen konstruktor ora bisa ngganti referensi paramèter input, nanging bener ngganti referensi salinan paramèter input. FileEmpoyee.java
class Employee
{
 Employee(String x, String y)
 {
  String temp = x;
  x = y;
  y = temp;
 }
 public static void main(String args[])
 {
  String name1 = new String("Alice");
  String name2 = new String("Mary");
  Employee a = new Employee(name1, name2);
  System.out.println("name1="+name1);
  System.out.println("name2="+name2);
 }
}
Output saka program yaiku:
name1=Alice
name2=Mary
Yen Jawa nggunakake telpon kanthi referensi kanggo pass obyek minangka parameter, konstruktor bakal ngganti name1lan ing conto iki name2. Konstruktor ora bakal ngganti referensi obyek sing disimpen ing variabel name1lan name2. Iki nuduhake yen paramèter konstruktor diwiwiti kanthi salinan referensi kasebut. Banjur konstruktor ngganti salinan kasebut. Nalika konstruktor ngrampungake karyane, variabel x lan y numpes, lan variabel asli name1terus name2ngrujuk menyang obyek sadurunge.

Ngganti paramèter liwati kanggo konstruktor.

Konstruktor ora bisa ngowahi paramèter liwat jinis dhasar. Nanging, konstruktor bisa ngowahi kahanan obyek sing dilewati minangka parameter. Contone, nimbang program ing ngisor iki: FileSalary1.java
class Salary1
{
 Salary1(int x)
 {
  x = x * 3;
  System.out.println("x="+x);
 }
 public static void main(String args[])
 {
  int value = 1000;
  Salary1 s1 = new Salary1(value);
  System.out.println("value="+value);
 }
}
Output saka program yaiku:
x=3000
value=1000
Temenan, cara iki ora bakal ngganti parameter jinis utama. Mulane, sawise nelpon konstruktor, nilai variabel valuetetep padha karo 1000. Intine telung perkara sing kedadeyan:
  1. Variabel kasebut xdiwiwiti kanthi salinan nilai parameter value(yaiku, nomer 1000).
  2. Nilai variabel xwis tikel telu - saiki padha karo 3000. Nanging, nilai variabel valuetetep padha karo 1000.
  3. Konstruktor mungkasi lan variabel xora digunakake maneh.
Ing conto ing ngisor iki, gaji karyawan kasil tikel kaping telu amarga nilai referensi obyek dilewati minangka parameter kanggo metode kasebut. FileSalary2.java
class Salary2
{
 int value = 1000;
 Salary2()
 {
 }
 Salary2(Salary2 x)
 {
  x.value = x.value * 3;
 }
 public static void main(String args[])
 {
  Salary2 s1 = new Salary2();
  Salary2 s2 = new Salary2(s1);
  System.out.println("s1.value=" +s1.value);
  System.out.println("s2.value="+s2.value);
 }
}
Output saka program yaiku:
s1.value=3000
s2.value=1000
Nilai referensi obyek digunakake minangka parameter. Nalika nglakokake baris Salary2 s2 = new Salary2(s1); konstruktor Salary2(Salary x)bakal liwati Nilai referensi kanggo obyek variabel s1, lan konstruktor èfèktif bakal telung gaji kanggo s1.value, wiwit malah salinan (Salary x)digawe nang konstruktor TCTerms kanggo obyek variabel s1.

Konstruktor parameterized dening primitif.

Yen paramèter saka konstruktor overloaded nggunakake primitif sing bisa narrowed (contone int <- double), banjur nelpon cara karo nilai narrowed bisa, senadyan kasunyatan sing ora ana cara overloaded karo parameter kuwi. Contone: FilePrimitive.java
class Primitive
{
 Primitive(double d)
 {
  d = d + 10;
  System.out.println("d="+d);
 }
 public static void main(String args[])
 {
  int i = 20;
  Primitive s1 = new Primitive(i);
 }
}
Output saka program yaiku:
d=30.0
Sanajan kasunyatane kelas kasebut Primitiveora duwe konstruktor sing duwe parameter jinis int, konstruktor kanthi parameter input bakal bisa digunakake double. Sadurunge nelpon konstruktor, variabel ibakal ditambahi saka jinis intmenyang jinis double. Opsi ngelawan, nalika variabel ibakal dadi jinis double, lan konstruktor mung duwe parameter int, ing kahanan iki bakal nyebabake kesalahan kompilasi.

Telpon konstruktor lan operatornew

Konstruktor tansah diarani operator new. Nalika konstruktor diarani karo operator new, konstruktor tansah ngasilake referensi kanggo obyek anyar. Ora bisa meksa konstruktor kanggo mbentuk referensi kanggo obyek sing wis ana tinimbang referensi kanggo obyek anyar, kajaba kanthi ngganti obyek sing deserialized. Lan karo operator anyar, tinimbang referensi kanggo obyek anyar, iku mokal kanggo mbentuk referensi kanggo obyek wis ana. Contone: FileSalary3.java
class Salary3
{
 int value = 1000;
 Salary3()
 {
 }
 Salary3(Salary3 x)
 {
  x.value = x.value * 3;
 }
 public static void main(String args[])
 {
  Salary3 s1 = new Salary3();
  System.out.println("First object creation: "+s1.value);

  Salary3 s2 = new Salary3(s1);
  System.out.println("Second object creation: "+s2.value);
  System.out.println("What's happend with first object?:"+s1.value);

  Salary3 s3 = new Salary3(s1);
  System.out.println("Third object creation: "+s3.value);
  System.out.println("What's happend with first object?:"+s1.value);
 }
}
Output saka program yaiku:
First object creation: 1000
Second object creation: 1000
What's happend with first object?: 3000
Third object creation: 1000
What's happend with first object?: 9000
Pisanan, nggunakake baris Salary3 s1 = new Salary3(); obyek anyar digawe. Sabanjure, yen nggunakake baris Salary3 s2 = new Salary3(s1); utawa senar Salary3 s3 = new Salary3(s1); bisa uga nggawe link menyang obyek sing wis ana, banjur s1.value s2.valuepadha s3.valuenyimpen nilai sing padha 1000. Bener ing baris Salary3 s2 = new Salary3(s1); obyek anyar kanggo variabel bakal digawe s2lan negara obyek kanggo variabel bakal ngganti s1dening maringaken Nilai referensi kanggo obyek ing parameter konstruktor. Iki bisa diverifikasi kanthi asil output. Lan nalika nglakokake baris Salary3 s3 = new Salary3(s1); obyek NEW kanggo variabel bakal digawe s3lan negara obyek kanggo variabel bakal diganti maneh s1.

Konstruktor lan pamblokiran initialization, urutan tumindak nalika nelpon konstruktor

Bagean Nggawe Obyek lan Konstruktor nampilake tumindak umum sing ditindakake nalika nggawe obyek. Ing antarane yaiku proses nginisialisasi lapangan kelas lan nggarap konstruktor kelas, sing uga duwe urutan internal:
  1. Kabeh kolom data diinisialisasi dadi nilai standar (0, palsu, utawa null).
  2. Kabeh initializers lapangan lan pamblokiran initialization kaleksanan ing urutan padha kadhaptar ing deklarasi kelas.
  3. Yen konstruktor liyane diarani ing baris pisanan konstruktor, banjur konstruktor sing diarani dieksekusi.
  4. Awak konstruktor dieksekusi.
Konstruktor ana hubungane karo inisialisasi amarga ing Jawa ana telung cara kanggo miwiti lapangan ing kelas:
  • nemtokake nilai ing deklarasi;
  • nemtokake nilai ing blok initialization;
  • nyetel nilai ing konstruktor.
Mesthi, sampeyan kudu ngatur kode initialization supaya gampang dingerteni. Kelas ing ngisor iki diwenehi minangka conto:
class Initialization
{
 int i;
 short z = 10;
 static int x;
 static float y;
 static
 {
  x = 2000;
  y = 3.141;
 }
 Initialization()
 {
  System.out.println("i="+i);
  System.out.println("z="+z);
  z = 20;
  System.out.println("z="+z);
 }
}
Ing conto ing ndhuwur, variabel diinisialisasi kanthi urutan ing ngisor iki: variabel statis diinisialisasi dhisik xkanthi ynilai standar. Sabanjure, blok initialization statis dieksekusi. Banjur variabel diinisialisasi idadi nilai standar lan variabel diinisialisasi z. Sabanjure, desainer bakal kerja. Nelpon konstruktor kelas ngirim ora gumantung ing urutan kang lapangan diumumake. Iki bisa nyebabake kesalahan.

Konstruktor lan warisan

Konstruktor ora diwarisake. Tuladhane:
public class Example
{
 Example()
 {
 }
 public void sayHi()
 {
  system.out.println("Hi");
 }
}

public class SubClass extends Example
{
}
Kelas SubClasskanthi otomatis marisi cara sayHi()sing ditetepake ing kelas induk. Ing wektu sing padha, konstruktor Example()kelas induk ora diwarisake dening turunane SubClass.

Tembung kunci thising konstruktor

Konstruktor digunakake thiskanggo deleng konstruktor liyane ing kelas padha, nanging karo dhaftar paramèter beda. Yen konstruktor nggunakake tembung kunci this, mula kudu ana ing baris pisanan; ora nggatekake aturan iki bakal nyebabake kesalahan kompiler. Contone: FileThisDemo.java
public class ThisDemo
{
 String name;
 ThisDemo(String s)
 {
  name = s;
     System.out.println(name);
 }
 ThisDemo()
 {
  this("John");
 }
 public static void main(String args[])
 {
  ThisDemo td1 = new ThisDemo("Mary");
  ThisDemo td2 = new ThisDemo();
 }
}
Output saka program yaiku:
Mary
John
Ing conto iki ana loro konstruktor. Sing pisanan nampa argumen string. Kapindho ora nampa bantahan, mung nelpon konstruktor pisanan nggunakake jeneng standar "John". Mangkono, sampeyan bisa nggunakake konstruktor kanggo miwiti nilai lapangan kanthi eksplisit lan standar, sing asring dibutuhake ing program.

Tembung kunci supering konstruktor

Konstruktor digunakake superkanggo nelpon konstruktor superclass. Yen konstruktor nggunakake super, banjur telpon iki kudu ing baris pisanan, yen compiler bakal uncalan kesalahan. Ing ngisor iki conto: FileSuperClassDemo.java
public class SuperClassDemo
{
 SuperClassDemo()
 {
 }
}

class Child extends SuperClassDemo
{
 Child()
 {
  super();
 }
}
Ing conto prasaja iki, konstruktor Child()ngemot telpon super()sing nggawe conto saka kelas SuperClassDemo, saliyane kelas Child. Amarga superkudu dadi statement pisanan sing dieksekusi ing konstruktor subclass, urutan iki tansah padha lan ora gumantung apa super(). Yen ora digunakake, konstruktor standar (ora ana paramèter) saben superclass, diwiwiti karo kelas dasar, bakal dieksekusi dhisik. Program ing ngisor iki nuduhake nalika konstruktor dieksekusi. FileCall.java
//Создать суперкласс A
class A
{
 A()
 {
  System.out.println("Inside A constructor.");
 }
}

//Создать подкласс B, расширяющий класс A
class B extends A
{
 B()
 {
  System.out.println("Inside B constructor.");
 }
}

//Создать класс (C), расширяющий класс В
class C extends B
{
 C()
 {
  System.out.println("Inside C constructor.");
 }
}

class Call
{
 public static void main(String args[])
 {
  C c = new C();
 }
}
Output saka program iki:
Inside A constructor.
Inside B constructor.
Inside C constructor.
Konstruktor diarani miturut urutan subordinasi kelas. Iki ndadekake sawetara pangertèn. Amarga superclass ora duwe kawruh babagan subclass, ikisialisasi sing kudu ditindakake kapisah. Yen bisa, iku kudu ndhisiki sembarang initialization dileksanakake dening subclass. Mulane kudu ditindakake dhisik.

Konstruktor sing bisa disesuaikan

Mekanisme identifikasi jinis run-time minangka salah sawijining prinsip inti sing kuat saka basa Jawa sing ngetrapake polimorfisme. Nanging, mekanisme kasebut ora nglindhungi pangembang saka jinis casting sing ora kompatibel ing sawetara kasus. Kasus sing paling umum yaiku manipulasi klompok obyek, macem-macem jinis sing ora dingerteni sadurunge lan ditemtokake ing wektu mlaku. Amarga kesalahan sing ana gandhengane karo jinis incompatibility mung bisa katon ing tataran runtime, iki ndadekake angel kanggo nggoleki lan ngilangi. Pambuka jinis adat ing Jawa 2 5.0 mindhah sawetara kasalahan iki saka runtime kanggo ngumpulake wektu lan nyedhiyani sawetara safety jinis ilang. Ora perlu casting jinis eksplisit nalika pindhah saka jinis Objectmenyang jinis konkrit. Sampeyan kudu eling yen alat kustomisasi jinis mung bisa digunakake karo obyek lan ora ditrapake kanggo jinis data primitif sing ana ing njaba wit warisan kelas. Kanthi jinis khusus, kabeh cast ditindakake kanthi otomatis lan ing mburi layar. Iki ngidini sampeyan nglindhungi saka jinis mismatching lan nggunakake maneh kode luwih kerep. Jinis khusus bisa digunakake ing konstruktor. Konstruktor bisa dadi adat sanajan kelase dudu jinis khusus. Tuladhane:
class GenConstructor
{
 private double val;
 <T extends Number> GenConstructor(T arg)
 {
   val = arg.doubleValue();
 }

 void printValue()
 {
  System.out.println("val: "+val);
 }
}

class GenConstructorDemo
{
 public static void main(String args[])
 {
  GenConstructor gc1 = new GenConstructor(100);
  GenConstructor gc2 = new GenConstructor(123.5F);

  gc1.printValue();
  gc2.printValue();
 }
}
Amarga konstruktor GenConstructornemtokake parameter jinis khusus sing kudu dadi kelas asal saka kelas Number, bisa diarani saka sembarang
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION