Friday, June 18, 2010

ජාවාහි එන Wrapper classes යනු මොනවාද..?

ඔබ දන්නවා ජාවා වැඩසටහන තිබෙනවා මූලික දත්ත ආකාර(primitive data types) 8ක්. ජාවාහි සෑම තැනකටම පොදු ඔබ්ජෙක්ට් ඔරියන්ටඩ් ගතිය මෙම primitive data types තුල නැති බව බැලූ බැල්මටම පෙනෙනවා. මෙම wrapper classes නිර්මාණය කර ඇත්තේ මෙම primitive data type 8 සඳහා objects සෑදීමේ හැකියාව ලබාදීමටයි. එම නිසා ජාවා 1.0 සංස්කරණයේ සිටම මෙම primitive data types 8 සඳහා wrapper class 8ක් පැමිණෙනවා මේවා java.lang පැකේජයේ අන්තර්ගත වන නිසා වැඩසටහනකට විශේෂයෙන් import කිරීමට අවශ්‍ය නැහැ.

මෙම  wrapper classes යොදාගෙන ජාවාහි ඉතා වැදගත් කාර්‍යභාරයක් කරගැනීමට පුලුවන්. data types convert කිරීම මෙවායේ සුලභ යෙදීමක්.  මීට අමතරව එම දත්ත ආකාරය ගැන වැඩි විස්තර මෙම wrapper classes යොදාගනිමින් අපට ලබාගන්නටද පුලුවන්.

Primitive type Wrapper class

boolean

Boolean

char

Character

byte

Byte

short

Short

int

Integer

long

Long

float

Float

double

Double


අපි දැන් බලමු wrapper class යොදගෙන ලියන ලද සරල වැඩසටහනක්.

public class Wrapper{
 public static void main(String args[]){
  Integer num1=new Integer(23);
  Integer num2=new Integer(34);
  Integer tot1=new Integer(num1+num2);
  Integer tot2=num1+num2;
  
  System.out.println("tot1 : " + tot2);
  System.out.println("tot2 : " + tot1);
 }
}
ඉහත වැඩසටහන නිරීක්ෂණයෙන් ඔබට පෙනෙනවා ඇති ක්‍රම 2කකට අපි num1 හා num2 හි එකතුව ලබාගෙන තිබෙනවා. ජාවා 1.5 න් පසු සංස්කරණ වලදී නම් මෙම 2 ක්‍රම 2ම දෝශ රහිතයි නමුත් ඊට පෙර සංස්කරණයන්හි 2වන ක්‍රමය එනම් 6 වන පේලියේ ඇති ක්‍රමය දෝශ සහගතයි. Integer class type එක ඇති ඔබ්ජෙක්ට් එකකට int primitive type එකක් assign කිරීම ඇත්තටම වරදක්. නමුත් ජාවා 1.5න් පසු සංස්කරණ වලදී එලෙස assign කර ඇති අගය සුදුසු wrapper class type එකට convert කිරීමෙන් අනතුරුවයි assign කිරීම සිදුකරන්නේ. මෙය autoboxing ලෙසත් හඳුන්වනවා.

දැන් අපි බලමු මෙම wrapper classes භාවිතාකර data types convert කරන ආකාරය. මේ සඳහා ලියන ලද සරළ ජාවා වැඩසටහන බලමු.
public class Wrapper{
 public static void main(String args[]){
  String str1="23.44";
  String str2="44.76";
  float val1=Float.parseFloat(str1);
  float val2=Float.parseFloat(str2);

  System.out.println("str1 \t => " + str1);
  System.out.println("str2 \t => " + str2);
  System.out.println("String Data\t=> "+str1+str2);
  System.out.print("float  Data\t=> ");
  System.out.println(val1+val2);
 }
}
 line 5 හා line6 දී සිදුකර ඇත්තේ str1 හා str2 යන String data val1 හා val2 ලෙස float ඩේටා බවට පත්කිරීමයි. ඒ ආකාරයට wrapper class අටේම ඇති parseXXX methods (parseInt(),parseFloat(),parseDouble()...) දත්ත භාවිතා කර අපිට අවශ්‍ය data type වලට convert කරගන්න පුලුවන්.

දැන් අපි wrapper classes භාවිතා කර යම් data type එකකට දැරිය හැකි උපරිම හා අවම අගයන් ලබාගැනීමට වැඩසටහනක් ලියමු.
public class Wrapper{
 public static void main(String args[]){
  
  System.out.println("Byte wrapper"+"\t_______________");
  System.out.println("Max value : "+Byte.MAX_VALUE);
  System.out.println("Min value : "+Byte.MIN_VALUE);
  System.out.println();

  System.out.println("Integer wrapper"+"\t_______________");
  System.out.println("Max value : "+Integer.MAX_VALUE);
  System.out.println("Min value : "+Integer.MIN_VALUE);  
  System.out.println();

  System.out.println("Long wrapper"+"\t_______________");
  System.out.println("Max value : "+Long.MAX_VALUE);
  System.out.println("Min value : "+Long.MIN_VALUE); 
  System.out.println();
  
  System.out.println("Float wrapper"+"\t_______________");
  System.out.println("Max value : "+Float.MAX_VALUE);
  System.out.println("Min value : "+Float.MIN_VALUE); 
  System.out.println(); 
  
  System.out.println("Double wrapper"+"\t_______________");
  System.out.println("Max value : "+Double.MAX_VALUE);
  System.out.println("Min value : "+Double.MIN_VALUE); 
  System.out.println();
 }
}
ප්‍රථිඵලය:

Source: Java Documentation

12 comments:

  1. නියමයි අයියේ...අපි වගේ ප්‍රෝගැමින් වල නවකයන්ට මේක මාරම වටිනව

    ReplyDelete
  2. ම්ල්ලීට මේ ක්ෂේත්‍රයේ උපරිම දුරක් යාමට ලැබේවායි ප්‍රාර්ථනා කරනවා!

    ReplyDelete
  3. Java/C++ වගේ language එකක් ආරම්භයේදී ඉගෙන ගන්නවා නම් ඉන් පසුව අනිත් ලැන්ග්වේජ්(C#,PHP) ඉගෙන ගන්න එක ගොඩක් ලේසියි. ආරම්භ කරන එක VB වගේ එකකට වඩා ටිකක් අමාරු වුනත් පස්සෙ තමයි ඒකෙ වටිනා කම තේරෙන්නෙ.
    මම මුලින්ම ප්‍රොග්‍රැමින් පටන්ගත්තෙ VB6 වලින් පස්සෙ තමයි තේරුනෙ Java/C++ වගේ භාෂා වලින් බොහොම ක්‍රමවත් රටාවකට ප්‍රෝග්‍රෑම් ලියන්න හුරු වෙනවා කියලා.
    මම කියන්නෙ VB6 වගේ භාෂාවකින් පටන් ගන්න එක වැරදියි කියල නෙවෙයි. Java/C++ වගේ එකක්කින් අමාරුවෙන් හරි පටන් ගන්න එක වඩා හොඳයි කියලයි.

    ReplyDelete
  4. ඔය wrapper ක්ලාස් එක අපට බලාගන්න ක්‍රමයක් නැද්ද?

    ReplyDelete
  5. අසිත, ඔයාට අවශ්‍ය wrapper class එකේ documentation එක බලාගන්නද නැත්නම් wrapper class එකේ implementation එක (wrapper class එකේ source code) එක බලාගන්නද?

    ReplyDelete
  6. අසිත ඔයාට ජාවා documentation එකෙන් wrappr classes ගැන බලාගන්න ඕන නම්
    java doc එකෙන් බලන්න. නිතර නිතර ජාවා doc එක පරිහරණය කරන එක ගොඩක් හොඳයි.

    ReplyDelete
  7. public class Wrapper{

    public static void main(String args[]){

    String str1="k";
    String str2="s";

    float val1=Float.parseFloat(str1);
    float val2=Float.parseFloat(str2);

    System.out.println(val1+val2);
    }
    }

    string1 widiyata charactor1 dunnama compile vunat run kalama error1 enawa.ai a?

    ReplyDelete
  8. @NADEESHA ,

    String str1="k";
    String str2="s";

    It should throws NumberFormat exception because you are trying to parse non float format values ( k , s ).
    example for a parsable float number.

    String numb="12.34";

    ReplyDelete
  9. public class Convert{
    public static void main(String args[]){

    String st1="G";

    char val1=Character.parseChar(st1);

    System.out.println(val1);

    }
    }


    char 1kata convert kirimedi error1 enawa.meka waradida?

    ReplyDelete
  10. reply to JANUARY 7, 2013 8:42 AM

    Thank you very much! I got the point!!!

    also wises for ur success!!

    ReplyDelete
  11. @NADEESHA,
    parseChar() යනුවෙන් method එකක් Character wrapper class එකේ නැහැ.
    Char @ Javadoc

    ඒක නිසා අදාල කෝඩ් එක කම්පයිල් කරන්න බැහැ. පහත දක්වා තියන විදියටත් පුලුවන් String එකක තියන දෙයක් char එකක් බවට පත්කරගන්න.(තවත් ආකාර තිබේ)

    String st1="G";
    char val1=st1.charAt(0);

    ReplyDelete