কেউ আমাকে ধারণাটি ব্যাখ্যা করতে পারেন কি toString()Objectক্লাসে সংজ্ঞায়িত পদ্ধতিটির ? এটি কীভাবে ব্যবহৃত হয় এবং এর উদ্দেশ্য কী?
কেউ আমাকে ধারণাটি ব্যাখ্যা করতে পারেন কি toString()Objectক্লাসে সংজ্ঞায়িত পদ্ধতিটির ? এটি কীভাবে ব্যবহৃত হয় এবং এর উদ্দেশ্য কী?
উত্তর:
Object.toStringডক্স থেকে :
বস্তুর একটি স্ট্রিং প্রতিনিধিত্ব প্রদান করে। সাধারণভাবে,
toStringপদ্ধতিটি একটি স্ট্রিং প্রদান করে যা এই বস্তুকে "পাঠ্যগতভাবে উপস্থাপন করে"। ফলাফলটি একটি সংক্ষিপ্ত কিন্তু তথ্যমূলক উপস্থাপনা হওয়া উচিত যা কোনও ব্যক্তির পক্ষে পড়া সহজ। সমস্ত সাবক্লাসগুলি এই পদ্ধতিটিকে ওভাররাইড করার পরামর্শ দেওয়া হয়।
toStringবর্গ জন্য পদ্ধতিObject@ একটি স্ট্রিং বর্গ যা বস্তুর একটি দৃষ্টান্ত এ সাইন ইন চরিত্র `অবস্থিত তার নাম নিয়ে গঠিত ', এবং বস্তুর হ্যাশ কোডের স্বাক্ষরবিহীন হেক্সাডেসিমেল উপস্থাপনা ফেরৎ। অন্য কথায়, এই পদ্ধতিটি এর মান সমান একটি স্ট্রিং প্রদান করে:
getClass().getName() + '@' + Integer.toHexString(hashCode())
উদাহরণ:
String[] mystr ={"a","b","c"};
System.out.println("mystr.toString: " + mystr.toString());
output:- mystr.toString: [Ljava.lang.String;@13aaa14a
এর ব্যবহার String.toString :
যখনই আপনাকে Stringফর্মের কন্সট্রাক্টর হিসাবে পরিচিত মানটি অন্বেষণ করতে হবে, আপনি কেবল ব্যবহার করতে পারেন String.toString... উদাহরণস্বরূপ ...
package pack1;
import java.util.*;
class Bank {
String n;
String add;
int an;
int bal;
int dep;
public Bank(String n, String add, int an, int bal) {
this.add = add;
this.bal = bal;
this.an = an;
this.n = n;
}
public String toString() {
return "Name of the customer.:" + this.n + ",, "
+ "Address of the customer.:" + this.add + ",, " + "A/c no..:"
+ this.an + ",, " + "Balance in A/c..:" + this.bal;
}
}
public class Demo2 {
public static void main(String[] args) {
List<Bank> l = new LinkedList<Bank>();
Bank b1 = new Bank("naseem1", "Darbhanga,bihar", 123, 1000);
Bank b2 = new Bank("naseem2", "patna,bihar", 124, 1500);
Bank b3 = new Bank("naseem3", "madhubani,bihar", 125, 1600);
Bank b4 = new Bank("naseem4", "samastipur,bihar", 126, 1700);
Bank b5 = new Bank("naseem5", "muzafferpur,bihar", 127, 1800);
l.add(b1);
l.add(b2);
l.add(b3);
l.add(b4);
l.add(b5);
Iterator<Bank> i = l.iterator();
while (i.hasNext()) {
System.out.println(i.next());
}
}
}
... এই প্রোগ্রামটি আপনার Eclipse এ অনুলিপি করুন, এবং এটি চালান ... আপনি সম্পর্কে ধারণা পাবেন String.toString...
toStringUI উদ্দেশ্য জন্য নয় এবং উপযুক্ত নয়।
toStringকোনও বস্তু প্রদর্শন করতে ব্যবহার করছে? যদি আমার একটি সমৃদ্ধ বস্তু থাকে এবং আমি এটি একটি জিইউআইতে দেখাতে চাই, তবে না, আমি এটির জন্য কোনও অতিরিক্ত রেন্ডারার তৈরি করি না এবং জিইউআইতে এটি ব্যবহার করার জন্য আমি বস্তুর বাইরে কোনও স্ট্রিং সম্পত্তিও বের করি না, আমি এটি রাখি সহজ এবং বাস্তবায়ন toStringযে সমস্ত ওভারহেড পরিলক্ষিত করতে সক্ষম। আপনি যদি আরও পরিষ্কার উপায়ে এটি করতে চান তবে একটি র্যাপার ক্লাস তৈরি করুন যা ইউআই উদ্দেশ্যগুলির জন্য উত্সর্গীকৃত, এবং toStringমোড়কের স্ট্রিং সম্পত্তি ফিরিয়ে দেওয়ার জন্য তার পদ্ধতিটি প্রয়োগ করে ।
toString()পদ্ধতি ফেরৎ পাঠগত একটি বস্তুর উপস্থাপনা। একটি মৌলিক বাস্তবায়ন ইতিমধ্যে এতে অন্তর্ভুক্ত রয়েছে java.lang.Objectএবং কারণ সমস্ত বস্তু উত্তরাধিকার সূত্রে প্রাপ্তjava.lang.Object তা গ্যারান্টিযুক্ত যে জাভাতে প্রতিটি বস্তুর এই পদ্ধতি রয়েছে।
পদ্ধতিটি ওভাররাইড করা সর্বদা একটি ভাল ধারণা, বিশেষত এটি যখন ডিবাগিংয়ের ক্ষেত্রে আসে, কারণ ডিবাগারগুলি প্রায়শই toString()পদ্ধতির ফলাফল দ্বারা অবজেক্টগুলি দেখায় । সুতরাং একটি অর্থবহ বাস্তবায়ন ব্যবহার করুন তবে প্রযুক্তিগত উদ্দেশ্যে এটি ব্যবহার করুন । অ্যাপ্লিকেশন যুক্তিতে গিটারগুলি ব্যবহার করা উচিত:
public class Contact {
private String firstName;
private String lastName;
public Contact (String firstName, String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
public String getFirstName() {return firstName;}
public String getLastName() {return lastName;}
public String getContact() {
return firstName + " " + lastName;
}
@Override
public String toString() {
return "["+getContact()+"]";
}
}
এটি কোনও প্রয়োগের প্রসঙ্গে optionচ্ছিকভাবে ব্যবহার করতে পারে তবে প্রায়শই এটি ডিবাগিংয়ের উদ্দেশ্যে ব্যবহৃত হয়। উদাহরণস্বরূপ, আপনি যখন কোনও আইডিইতে একটি ব্রেকপয়েন্টে আঘাত করেন, অর্থবোধক পড়া এত সহজtoString() তাদের সদস্যদের তদন্ত করার চেয়ে ।
কোন toString()পদ্ধতিটি করা উচিত তার জন্য কোনও সেটের প্রয়োজন নেই । কনভেনশন দ্বারা, প্রায়শই এটি আপনাকে শ্রেণীর নাম এবং প্রাসঙ্গিক ডেটা মেম্বারগুলির মান বলবে। না প্রায়শই, toString()পদ্ধতিগুলি আইডিইগুলিতে স্বয়ংক্রিয়ভাবে উত্পন্ন হয়।
কোনও toString()পদ্ধতি থেকে নির্দিষ্ট আউটপুটের উপর নির্ভর করা বা এটি প্রোগ্রামের মধ্যে পার্স করা খারাপ ধারণা। আপনি যা করেন না কেন, সেই পথে নামবেন না।
টুস্ট্রিং () বস্তুর একটি স্ট্রিং / পাঠ্য উপস্থাপনা প্রদান করে। ডিবাগিং, লগিং ইত্যাদির মতো ডায়াগনস্টিক উদ্দেশ্যে সাধারণত ব্যবহৃত হয়, টুস্ট্রিং () পদ্ধতিটি অবজেক্ট সম্পর্কে অর্থপূর্ণ বিবরণ পড়তে ব্যবহৃত হয়।
যখন বস্তুটি প্রিন্টলন, মুদ্রণ, প্রিন্টফ, স্ট্রিং.ফর্ম্যাট (), দৃsert়তা বা স্ট্রিং কনকেনটেশন অপারেটরের কাছে পাঠানো হয় তখন এটি স্বয়ংক্রিয়ভাবে আহ্বান করা হয়।
ক্লাস অবজেক্টে টস্ট্রিং () এর ডিফল্ট বাস্তবায়নটি এই চিহ্নটির অনুসরণ করে @ চিহ্ন এবং নিম্নলিখিত যুক্তি ব্যবহার করে এই বস্তুর হ্যাশ কোডটির স্বাক্ষরবিহীন হেক্সাডেসিমাল উপস্থাপনের পরে একটি স্ট্রিং প্রদান করে,
getClass().getName() + "@" + Integer.toHexString(hashCode())
উদাহরণস্বরূপ, নিম্নলিখিত
public final class Coordinates {
private final double x;
private final double y;
public Coordinates(double x, double y) {
this.x = x;
this.y = y;
}
public static void main(String[] args) {
Coordinates coordinates = new Coordinates(1, 2);
System.out.println("Bourne's current location - " + coordinates);
}
}
কপি করে প্রিন্ট
Bourne's current location - Coordinates@addbf1 //concise, but not really useful to the reader
এখন, স্থানাঙ্ক শ্রেণিতে টু স্ট্রিং () কে নিম্নরূপে ওভাররাইড করা,
@Override
public String toString() {
return "(" + x + ", " + y + ")";
}
ফলাফল স্বরূপ
Bourne's current location - (1.0, 2.0) //concise and informative
স্ট্রিং () তে ওভাররাইডিংয়ের উপযোগিতা আরও বেশি হয়ে যায় যখন এই পদার্থগুলির রেফারেন্স সম্বলিত সংগ্রহগুলিতে পদ্ধতিটি আহ্বান করা হয়। উদাহরণস্বরূপ, নিম্নলিখিত
public static void main(String[] args) {
Coordinates bourneLocation = new Coordinates(90, 0);
Coordinates bondLocation = new Coordinates(45, 90);
Map<String, Coordinates> locations = new HashMap<String, Coordinates>();
locations.put("Jason Bourne", bourneLocation);
locations.put("James Bond", bondLocation);
System.out.println(locations);
}
কপি করে প্রিন্ট
{James Bond=(45.0, 90.0), Jason Bourne=(90.0, 0.0)}
এর পরিবর্তে,
{James Bond=Coordinates@addbf1, Jason Bourne=Coordinates@42e816}
কয়েকটি বাস্তবায়ন পয়েন্টার,
ফিরতি স্ট্রিংয়ে থাকা সমস্ত দৃষ্টান্ত ক্ষেত্রের জন্য এক্সেসর / গেটর সরবরাহ করুন। উদাহরণস্বরূপ, সমন্বয়কারী ক্লাসে,
public double getX() {
return x;
}
public double getY() {
return y;
}টোস্ট্রিং () পদ্ধতির একটি বিস্তৃত কভারেজটি বইয়ের আইটেম 10 তে রয়েছে কার্যকর জাভা Second, দ্বিতীয় সংস্করণ, জোশ ব্লচের লেখা।
কোডিং:
public class Test {
public static void main(String args[]) {
ArrayList<Student> a = new ArrayList<Student>();
a.add(new Student("Steve", 12, "Daniel"));
a.add(new Student("Sachin", 10, "Tendulkar"));
System.out.println(a);
display(a);
}
static void display(ArrayList<Student> stu) {
stu.add(new Student("Yuvi", 12, "Bhajji"));
System.out.println(stu);
}
}
Student.java:
public class Student {
public String name;
public int id;
public String email;
Student() {
}
Student(String name, int id, String email) {
this.name = name;
this.id = id;
this.email = email;
}
public String toString(){ //using these toString to avoid the output like this [com.steve.test.Student@6e1408, com.steve.test.Student@e53108]
return name+" "+id+" "+email;
}
public String getName(){
return name;
}
public void setName(String name){
this.name=name;
}
public int getId(){
return id;
}
public void setId(int id){
this.id=id;
}
public String getEmail(){
return email;
}
public void setEmail(String email){
this.email=email;
}
}
আউটপুট:
[স্টিভ 12 ড্যানিয়েল, শচিন 10 টেন্ডুলকার]
[স্টিভ 12 ড্যানিয়েল, শচীন 10 টেন্ডুলকার, যুভি 12 ভজ্জি]
আপনি যদি পজো (স্টুডেন্ট.জভা) ক্লাসে স্ট্রিং () ব্যবহার না করে থাকেন তবে আপনি এর মতো একটি আউটপুট পাবেন [com.steve.test.Student@6e1408, com.steve.test.Student@e53108]issue
আপনি যখনই কোনও স্ট্রিং প্রসঙ্গে কোনও অবজেক্টে (স্ট্রিং নয়) অ্যাক্সেস করেন তখন টপস্ট্রিং () সংকলক দ্বারা কভারগুলির নীচে ডাকা হয়।
এই জন্যই
Map map = new HashMap();
System.out.println("map=" + map);
কাজ করে এবং নিজের ক্লাসে অবজেক্ট থেকে স্ট্যান্ডার্ড টু স্ট্রিং () কে ওভাররাইড করে আপনি স্ট্রিং প্রসঙ্গে আপনার জিনিসগুলিকেও দরকারী করে তুলতে পারেন।
(এবং এটি একটি কালো বাক্স হিসাবে বিবেচনা করুন! কখনও কখনও কোনও সামগ্রী মানুষের কাছে উপস্থাপন করা ছাড়া অন্য কোনও কিছুর জন্য ব্যবহার করবেন না)
/**
* This toString-Method works for every Class, where you want to display all the fields and its values
*/
public String toString() {
StringBuffer sb = new StringBuffer();
Field[] fields = getClass().getDeclaredFields(); //Get all fields incl. private ones
for (Field field : fields){
try {
field.setAccessible(true);
String key=field.getName();
String value;
try{
value = (String) field.get(this);
} catch (ClassCastException e){
value="";
}
sb.append(key).append(": ").append(value).append("\n");
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
return sb.toString();
}
আপনি যদি পাইথনটি প্রথমে এবং তার পরে জাভা শিখেন। আমি মনে করি এটি __str__()পাইথনের পদ্ধতি হিসাবে একই ভূমিকা পালন করে , এটি যাদু পদ্ধতি যেমন __dict__()এবং __init__()তবে বস্তুর প্রতিনিধিত্ব করে এমন একটি স্ট্রিং উল্লেখ করা।