CodeGym /وبلاگ جاوا /Random-FA /روش جاوا toString()
John Squirrels
مرحله
San Francisco

روش جاوا toString()

در گروه منتشر شد
اغلب هنگام ایجاد یک برنامه، لازم است که محتوای یک شی را پیدا کنید. برای این منظور، کلاس Java Object ، ابتدایی ترین کلاس جاوا در سلسله مراتب کلاس، یک متد خاص toString() را تعریف می کند . یک رشته کاراکتری را برمی گرداند که شی را توصیف می کند. پیاده سازی پیش فرض متد toString() در جاوا خروجی هایی مانند زیر تولید می کند:
package.class@hashCode
یعنی toString که در java.lang تعریف شده بود . Object کد هش شی را به شکل هگزادسیمال می دهد. این اغلب خیلی واضح و مفید نیست. بنابراین هنگام ایجاد یک کلاس جدید، مرسوم است که toString() را باطل کنیم تا رشته برگشتی شامل نام کلاس، نام ها و مقادیر همه متغیرها باشد. نادیده گرفتن روش toString به درستی می تواند به ورود و اشکال زدایی یک برنامه جاوا کمک کند، این روش اطلاعات ارزشمند و مهمی را ارائه می دهد. به بیان ساده، متد toString() در جاوا برای بدست آوردن یک شی رشته ای که مقدار یک شی عددی را نشان می دهد استفاده می شود. به عبارت دیگر یک عدد را به رشته تبدیل می کند. اگر متد یک نوع داده ساده را به عنوان آرگومان بگیرد، یک شی رشته ای برگردانده می شود که مقدار نوع داده ساده را نشان می دهد.

مثالی از متد جاوا toString().

معمولاً اگر یک کلاس ایجاد می کنید، علاوه بر متد toString() در جاوا، باید متدهای برابر ، hashCode و compareTo را باطل کنید تا بدانید چگونه با اشیاء آن کار کنید. اما در حال حاضر، بیایید روی toString تمرکز کنیم . در بیشتر موارد، ارسال اطلاعات متنی در مورد یک شی بسیار ساده است. فقط باید درک کنید که کاربر دقیقاً دوست دارد هنگام ورود به سیستم چه چیزی را ببیند. بیایید مثالی بزنیم و کلاسی بسازیم که نقطه ای از صفحه را توصیف کند. دارای دو مختصات است: مختصاتX، مختصاتY. به طور طبیعی، اگر کاربر بپرسد "این چیست" دقیقاً مانند نام خود کلاس، آنها باید روی صفحه نمایش داده شوند. این همان چیزی است که ما در متد overrided toString() نشان خواهیم داد . اکنون خود کلاس، فیلدهای آن (مختصات)، سازنده، دریافت کننده ها را برای به دست آوردن مختصات ایجاد می کنیم (مطمئناً امکان ایجاد آنها وجود ندارد، اما از نقطه نظر استفاده صحیح از OOP، دریافت کننده ها تمرین خوبی هستند). فقط برای نشان دادن، بیایید روشی را نیز ایجاد کنیم که یک نقطه جدید ایجاد می کند - مجموع دو نقطه دیگر، و همچنین متدهای برابر و هش کد را لغو می کند.
public class Point implements Comparable<Point> {
   private final int coordinateX;
   private final int coordinateY;

   public Point(final int coordinateX, final int coordinateY) {
       this.coordinateX = coordinateX;
       this.coordinateY = coordinateY;
   }

   public int getX() {
       return coordinateX;
   }

   public int getY() {
       return coordinateY;
   }

   public Point sum(final Point that) {
       return new Point(coordinateX + that.coordinateX, coordinateY + that.coordinateY);
   }

// here we override toString with coordinates and class name
   @Override
   public String toString() {
       return "Point{"
               + "X: " + getX()
               + ", Y: " + getY()
               +  '}';
   }

   @Override
   public boolean equals(Object o) {
       if (o == this) {
           return true;
       }
       if (o == null || o.getClass() != this.getClass()) {
           return false;
       }

   @Override
   public int hashCode() {
       return coordinateX + coordinateY;

   }
حالا بیایید یک کلاس تست و یک متد اصلی ایجاد کنیم. در آنجا ما دو امتیاز و سومین امتیاز را داریم که از جمع دو امتیاز به دست می آوریم. متد toString را در این نقطه اعمال می کنیم و آن را چاپ می کنیم.
//toString() method demo
public class Test {
   public static void main(String[] args) {
       Point myPoint1 = new Point(5,7);
       Point myPoint2 = new Point(-2, 8);
       Point mySum = myPoint1.sum(myPoint2);
     //call toString explicitly
       System.out.println(mySum.toString());
   }
}
نتیجه کار این برنامه به شرح زیر است:
نقطه {X: 3، Y: 15}
شما در واقع نیازی به فراخوانی صریح متد toString ندارید ، و اغلب اینطور نیست. برای فراخوانی متد ()toString ، به سادگی شی مورد نظر را به System.out.println ارسال کنید . بنابراین کلاس آزمایشی ما به شکل زیر خواهد بود:
//toString method demo
public class Test {
   public static void main(String[] args) {
       Point myPoint1 = new Point(5,7);
       Point myPoint2 = new Point(-2, 8);
       Point mySum = myPoint1.sum(myPoint2);
       //call toString implicitly
       System.out.println(mySum);
   }
}
خروجی برنامه مانند قبل است. اگر متد toString را لغو نکنیم ، اما بخواهیم شی را چاپ کنیم، چه؟ در این حالت متد toString از کلاس Object فراخوانی می شود. در مثال ما، اگر متد toString را از کلاس Point خود حذف کنیم و همه چیز را در کلاس تست به همان شکلی که هست رها کنیم، نتیجه زیر را دریافت خواهیم کرد:
نقطه@12
در اینجا ما کد هش شی را به صورت هگزادسیمال داریم.
نظرات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION