Senin, Mei 03, 2021

Parameter Tipe Terikat pada Bahasa Pemrograman Java

Ada saat dimana ketika programmer ingin membatasi tipe data yang ingin digunakan pada argumen dalam sebuah tipe dari parameter. Misalnya, method yang beroperasi pada angka (number) mungkin hanya ingin dibatasi jumlah penerimaan instance-nya dari angka atau dari subclass-nya saja. Untuk kondisi tersebut, maka fungsi parameter tipe terikat dapat digunakan pada pembuatan program Java, dengan kondisi berikut:

  • Ingin menggunakan seluruh class sebagai parameter dengan kondisi bahwa method umum Java dapat diciptakan. Serta, sebagaimana halnya constructor yang berfungsi sebagai spesial method, maka constructor juga bisa digunakan sebagai tipe parameter umum.
  • Ingin membatasi jenis objek yang dapat digunakan dalam tipe parameter. Misalnya dalam metode yang membandingkan dua objek dan ingin memastikan bahwa objek yang diterima adalah yang sebanding.
  • Inovasi dari fungsi method tersebut sama dengan method tak terikat kecuali bahwa jika programmer ingin menggunakan class apapun yang tidak sebanding, maka hasilnya adalah pesan error pada program.

Deklarasi parameter tipe terikat.
satu, Daftarkan tipe nama-nama parameter.
dua, Beserta extend keyword.
tiga, dan batas atasnya (upper bound).

Sintak:
<T extends superClassName>

Catatan: Pada konteks ini, extend digunakan sebagai istilah umum untuk makna "extends" (seperti pada class). Juga, spesifikasi T hanya bisa digantikan oleh superClassName, atau subclass dari superClassName. Dengan demikian, superclass didefinisikan secara inklusif dari batas atas (upper limit).

Berikut contoh program yang mengimplementasikan tipe terikat (extend superclass) dengan cara umum

// Variabel tipe terikat pada

// bahasa pemrograman Java

 

// class ini hanya menerima

// tipe parameter dari class

// extend class A atau class A

// itu sendiri.

 

// Melewatkan tipe parameter

// yang lain yang bukan extend

// class A akan mengakibatkan

// error pada saat kompilasi

// program

class Bound<t extends A>

{

 

private T objRef;

 

public Bound(T obj){

this.objRef = obj;

}

 

 

public void doRunTest(){

this.objRef.displayClass();

}

}

 

 

class A

{

public void displayClass()

{

System.out.println("Dalam"

+" super class A");

}

}

 

 

class B extends A

{

public void displayClass()

{

System.out.println("Dalam sub"

+" class B");

}

}

 

 

class C extends A

{

public void displayClass()

{

System.out.println("Dalam sub"

+" class C");

}

}

 

 

public class BoundedClass

{

public static void main(String a[])

{

 

 

// Menciptakan objek dari sub

// class c dan melewatkannya

// menuju parameter tipe

// terikat

Bound<c> bec = new Bound<c>(new C());

bec.doRunTest();

 

 

// Menciptakan objek dari sub

// class B dan melewatkannya

// menuju parameter tipe

// terikat

Bound<b> beb = new Bound<b>(new B());

beb.doRunTest();

 

 

// Sama seperti melewatkan

// super class A

Bound<a> bea = new Bound<a>(new A());

bea.doRunTest();

 

 

}

}

Output :
Dalam sub class C
Dalam sub class B
Dalam super class A

Untuk program selanjutnya dibatasi hanya pada tipe A dan sub class-nya

// Variabel tipe terikat pada

// bahasa pemrograman Java

 

// class ini hanya menerima

// tipe parameter dari class

// extend class A atau class A

// itu sendiri.

 

// Melewatkan tipe parameter

// yang lain yang bukan extend

// class A akan mengakibatkan

// error pada saat kompilasi

// program

class Bound<t extends A>

{

 

private T objRef;

 

public Bound(T obj){

this.objRef = obj;

}

 

 

public void doRunTest(){

this.objRef.displayClass();

}

}

 

 

class A

{

public void displayClass()

{

System.out.println("Dalam"

+" super class A");

}

}

 

 

class B extends A

{

public void displayClass()

{

System.out.println("Dalam sub"

+" class B");

}

}

 

 

class C extends A

{

public void displayClass()

{

System.out.println("Dalam sub"

+" class C");

}

}

 

 

public class BoundedClass

{

public static void main(String a[])

{

// Menciptakan objek dari sub

// class c dan melewatkannya

// menuju parameter tipe

// terikat

Bound<c> bec = new Bound<c>(new C());

bec.doRunTest();

 

// Menciptakan objek dari sub

// class B dan melewatkannya

// menuju parameter tipe

// terikat

Bound<b> beb = new Bound<b>(new B());

beb.doRunTest();

 

// Sama seperti melewatkan

// super class A

Bound<a> bea = new Bound<a>(new A());

bea.doRunTest();

 

// String bukanlah extends

// dari class A  

Bound<string> bes = new Bound<string>(new String());

bea.doRunTest();

 

}

}

Output:
error: type argument String is not within bounds of type-variable T

Variabel terikat tipe berganda
Parameter tipe terikat dapat digunakan bersama dengan method, class, dan interface.

Java juga mendukung variabel tipe terikat berganda. Pada kasus ini A dapat menjadi sebagai interface atau class. Jika A adalah class, maka B dan C harus menjadi interface-nya. Program tidak bisa memiliki lebih dari satu class pada variabel terikat tipe berganda.

Sintak:
<T extends superClassName & Interface>

Contoh program:

// Variabel tipe terikat pada

// bahasa pemrograman Java

class Bound<t extends A & B>

{

 

private T objRef;

 

public Bound(T obj){

this.objRef = obj;

}

 

 

public void doRunTest(){

this.objRef.displayClass();

}

}

 

 

interface B

{

public void displayClass();

}

 

 

class A implements B

{

public void displayClass()

{

System.out.println("Dalam"

+" super class A");

}

}

 

 

public class BoundedClass

{

public static void main(String a[])

{

// menciptakan objek dari sub

// class A dan melewatkan nya

// menuju parameter tipe

// terikat

Bound<a> bea = new Bound<a>(new A());

bea.doRunTest();

 

 

}

}

Output:
Dalam super class A

5 komentar:

  1. Apa fungsi keyword extends pada bahasa pemrograman Java?

    BalasHapus
    Balasan
    1. Keyword extends pada bahasa pemrograman Java digunakan untuk memperluas class yang merupakan pewarisan dari class lainnya pada program.

      Pada Java, sangat dimungkinkan untuk dilakukan pewarisan atribut dan method dari satu class ke class lainnya.

      Hapus
    2. Pada Java, keyword extends digunakan untuk menunjukkan bahwa new class diturunkan dari inheritance class sebelumnya. Jadi, pada dasarnya, fungsi dari keyword extends adalah untuk memperluas fungsionalitas class pada program Java.

      Hapus
  2. Apakah Java mendukung konsep multiple inheritance?

    BalasHapus
    Balasan
    1. Java tidak mendukung penggunaan konsep pewarisan ganda atau multiple inheritance, inilah mengapa programmer tidak bisa melakukan perluasan dari dua class yang berbeda secara bersamaan pada sebuah program. Sebaliknya, dapat digunakan satu buah class untuk dilakukan perluasan, dan juga dapat menggunakan interface untuk menyertakan fungsionalitas tambahan pada program Java.

      Hapus

Respon komentar 7 x 24 jam, so please be patient :D