পটভূমি
সমস্ত জাভা অবজেক্টগুলির একটি toString()
পদ্ধতি রয়েছে, যা আপনি চেষ্টা করার পরে এবং বস্তুটি মুদ্রণের সময় অনুরোধ করা হয়।
System.out.println(myObject); // invokes myObject.toString()
এই পদ্ধতিটি Object
ক্লাসে সংজ্ঞায়িত করা হয়েছে (সমস্ত জাভা সামগ্রীর সুপারক্লাস)। Object.toString()
পদ্ধতি মোটামুটি কুদর্শন স্ট্রিং, বর্গ, একটি নাম গঠিত ফেরৎ @
প্রতীক ও হ্যাশকোড হেক্সাডেসিমেল বস্তুর। এর জন্য কোডটি দেখে মনে হচ্ছে:
// Code of Object.toString()
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
ফলাফল হিসাবে com.foo.MyType@2f92e0f4
যেমন ব্যাখ্যা করা যেতে পারে:
com.foo.MyType
- ক্লাসের নাম, অর্থাৎ ক্লাসটি MyType
প্যাকেজে রয়েছে com.foo
।
@
- স্ট্রিং একসাথে যোগদান
2f92e0f4
বস্তুর হ্যাশকোড
অ্যারে ক্লাসগুলির নামটি কিছুটা আলাদা দেখায়, যা জাভাডোক্সে ভালভাবে ব্যাখ্যা করা হয়েছে Class.getName()
। উদাহরণস্বরূপ, এর [Ljava.lang.String
অর্থ:
[
- একটি একক মাত্রিক অ্যারে (যেমন [[
বা এর বিপরীতে [[[
)
L
- অ্যারেতে একটি শ্রেণি বা ইন্টারফেস রয়েছে
java.lang.String
- অ্যারেতে বস্তুর ধরণ
আউটপুট কাস্টমাইজ করা
ভিন্ন কিছু আপনি কল যখন মুদ্রণ করতে System.out.println(myObject)
, আপনাকে অবশ্যই ওভাররাইডtoString()
আপনার নিজের ক্লাসে পদ্ধতি। এখানে একটি সাধারণ উদাহরণ:
public class Person {
private String name;
// constructors and other methods omitted
@Override
public String toString() {
return name;
}
}
এখন যদি আমরা একটি মুদ্রণ করি তবে আমরা Person
তাদের নামটি না দেখি com.foo.Person@12345678
।
মনে রাখবেন যে কোনও বস্তুকে স্ট্রিংয়ে রূপান্তরিত করার জন্য toString()
কেবলমাত্র একটি উপায়। সাধারণত এই আউটপুটটি পরিষ্কারভাবে এবং সংক্ষিপ্তভাবে আপনার অবজেক্টকে পুরোপুরি বর্ণনা করতে হবে। toString()
আমাদের Person
শ্রেণীর জন্য আরও ভাল হতে পারে:
@Override
public String toString() {
return getClass().getSimpleName() + "[name=" + name + "]";
}
যা মুদ্রণ করবে, যেমন Person[name=Henry]
,। এটি ডিবাগিং / পরীক্ষার জন্য ডেটা সত্যিই দরকারী টুকরা।
আপনি যদি নিজের অবজেক্টের কেবল একটি দিকের দিকে মনোনিবেশ করতে চান বা প্রচুর জাজি ফর্ম্যাটিং অন্তর্ভুক্ত করতে চান তবে এর পরিবর্তে আপনি একটি পৃথক পদ্ধতি সংজ্ঞায়িত করার চেয়ে ভাল হতে পারেন String toElegantReport() {...}
।
আউটপুট স্বয়ংক্রিয়ভাবে উত্পন্ন হচ্ছে
ক্লাসের ক্ষেত্রগুলির উপর ভিত্তি করে অনেক আইডিই একটি toString()
পদ্ধতি স্বয়ংক্রিয়ভাবে উত্পন্ন করার জন্য সহায়তা দেয় offer উদাহরণস্বরূপ, Eclipse এবং IntelliJ এর জন্য ডকগুলি দেখুন ।
বেশ কয়েকটি জনপ্রিয় জাভা লাইব্রেরিও এই বৈশিষ্ট্যটি সরবরাহ করে। কিছু উদাহরণ অন্তর্ভুক্ত:
বস্তুর মুদ্রণ গোষ্ঠী
সুতরাং আপনি toString()
আপনার শ্রেণীর জন্য একটি সুন্দর তৈরি করেছেন । যদি সেই শ্রেণিটি একটি অ্যারে বা কোনও সংকলনে স্থাপন করা হয় তবে কী হবে?
অ্যারেগুলির
আপনার যদি অবজেক্টগুলির একটি অ্যারে থাকে তবে আপনি অ্যারের Arrays.toString()
সামগ্রীর একটি সহজ উপস্থাপনা উত্পাদন করতে কল করতে পারেন । উদাহরণস্বরূপ, Person
অবজেক্টের এই অ্যারেটি বিবেচনা করুন :
Person[] people = { new Person("Fred"), new Person("Mike") };
System.out.println(Arrays.toString(people));
// Prints: [Fred, Mike]
দ্রষ্টব্য: এটি অ্যারে ক্লাসে ডাকা একটি স্ট্যাটিক পদ্ধতির কল toString()
, যা আমরা উপরে আলোচনা করছি তার থেকে আলাদা।
আপনার যদি একটি বহুমাত্রিক অ্যারে থাকে তবে আপনি Arrays.deepToString()
একই ধরণের আউটপুট অর্জন করতে ব্যবহার করতে পারেন ।
সংগ্রহগুলি
বেশিরভাগ সংগ্রহগুলি .toString()
প্রতিটি উপাদানকে কল করার উপর ভিত্তি করে একটি সুন্দর আউটপুট উত্পাদন করে।
List<Person> people = new ArrayList<>();
people.add(new Person("Alice"));
people.add(new Person("Bob"));
System.out.println(people);
// Prints [Alice, Bob]
সুতরাং আপনাকে কেবল নিশ্চিত করতে হবে যে আপনার তালিকা উপাদানগুলি toString()
উপরে বর্ণিত হিসাবে একটি দুর্দান্ত সংজ্ঞা দিয়েছে ।