- উপরের স্টেটমেন্টটি ঠিক আছে (স্ট্রিং সহ এবং ডাব্লু / আউট প্রসারিত) ঠিক কীভাবে হয় আমি কেসআইসেন্সিটিভ স্ট্রিংকে স্ট্রিংয়ের মতো আচরণ করব? স্ট্রিং সম্পর্কে এটি কী এটি ঠিক এটির মতো আক্ষরিক পাস করতে সক্ষম হওয়া ঠিক করে দেয়? আমার বোঝা থেকে জাভাতে কোনও "কপি কন্সট্রাক্টর" ধারণা নেই?
প্রথম দিক থেকে যথেষ্ট বলা হয়েছে। "পোলিশ" একটি স্ট্রিং আক্ষরিক এবং কেসআইসেনসেটিভ স্ট্রিং ক্লাসে বরাদ্দ করা যায় না।
এখন দ্বিতীয় পয়েন্ট সম্পর্কে
যদিও আপনি নতুন আক্ষরিক তৈরি করতে পারবেন না, আপনি "অনুরূপ" পদ্ধতির জন্য সেই বইয়ের প্রথম আইটেমটি অনুসরণ করতে পারেন তাই নিম্নলিখিত বিবৃতিগুলি সত্য:
CaseInsensitiveString cis5 = CaseInsensitiveString.valueOf("sOmEtHiNg");
CaseInsensitiveString cis6 = CaseInsensitiveString.valueOf("SoMeThInG");
assert cis5 == cis6;
assert cis5.equals(cis6);
এখানে কোড।
C:\oreyes\samples\java\insensitive>type CaseInsensitiveString.java
import java.util.Map;
import java.util.HashMap;
public final class CaseInsensitiveString {
private static final Map<String,CaseInsensitiveString> innerPool
= new HashMap<String,CaseInsensitiveString>();
private final String s;
public static CaseInsensitiveString valueOf( String s ) {
if ( s == null ) {
return null;
}
String value = s.toLowerCase();
if ( !CaseInsensitiveString.innerPool.containsKey( value ) ) {
CaseInsensitiveString.innerPool.put( value , new CaseInsensitiveString( value ) );
}
return CaseInsensitiveString.innerPool.get( value );
}
public CaseInsensitiveString(String s){
if (s == null) {
throw new NullPointerException();
}
this.s = s.toLowerCase();
}
public boolean equals( Object other ) {
if ( other instanceof CaseInsensitiveString ) {
CaseInsensitiveString otherInstance = ( CaseInsensitiveString ) other;
return this.s.equals( otherInstance.s );
}
return false;
}
public int hashCode(){
return this.s.hashCode();
}
// "দাবী" কীওয়ার্ড ব্যবহার করে শ্রেণি পরীক্ষা করুন
public static void main( String [] args ) {
CaseInsensitiveString cis1 = new CaseInsensitiveString("Polish");
CaseInsensitiveString cis2 = new CaseInsensitiveString("Polish");
assert cis1 != cis2;
assert cis1.equals(cis2);
CaseInsensitiveString cis3 = CaseInsensitiveString.valueOf("Polish");
CaseInsensitiveString cis4 = CaseInsensitiveString.valueOf("Polish");
assert cis3 == cis4;
assert cis3.equals(cis4);
CaseInsensitiveString cis5 = CaseInsensitiveString.valueOf("sOmEtHiNg");
CaseInsensitiveString cis6 = CaseInsensitiveString.valueOf("SoMeThInG");
assert cis5 == cis6;
assert cis5.equals(cis6);
CaseInsensitiveString cis7 = CaseInsensitiveString.valueOf("SomethinG");
CaseInsensitiveString cis8 = CaseInsensitiveString.valueOf("someThing");
assert cis8 == cis5 && cis7 == cis6;
assert cis7.equals(cis5) && cis6.equals(cis8);
}
}
C:\oreyes\samples\java\insensitive>javac CaseInsensitiveString.java
C:\oreyes\samples\java\insensitive>java -ea CaseInsensitiveString
C:\oreyes\samples\java\insensitive>
এটি হ'ল কেসআইসেনসেটিভ স্ট্রিং অবজেক্টের একটি অভ্যন্তরীণ পুল তৈরি করুন এবং সেখান থেকে সংশোধনকারী উদাহরণটি ফিরিয়ে দিন।
এইভাবে "==" অপারেটর একই মানের প্রতিনিধিত্বকারী দুটি বস্তুর রেফারেন্সের জন্য সত্য দেয় ।
অনুরূপ অবজেক্টগুলি খুব ঘন ঘন ব্যবহৃত হয় এবং তৈরি ব্যয় ব্যয়বহুল হলে এটি দরকারী।
স্ট্রিং ক্লাস ডকুমেন্টেশন সূচিত করে যে ক্লাসটি একটি অভ্যন্তরীণ পুল ব্যবহার করে
ক্লাসটি সম্পূর্ণ নয়, যখন আমরা চারসেকেন্স ইন্টারফেসটি প্রয়োগ করার সময় অবজেক্টের বিষয়বস্তুগুলি চালনার চেষ্টা করি তখন কিছু আকর্ষণীয় সমস্যা দেখা দেয় তবে বইটিতে কীভাবে এই আইটেমটি প্রয়োগ করা যেতে পারে তা দেখানোর জন্য এই কোডটি যথেষ্ট ভাল।
এটি লক্ষ্য করা গুরুত্বপূর্ণ যে অভ্যন্তরীণ পুল অবজেক্টটি ব্যবহার করে , রেফারেন্সগুলি প্রকাশিত হয় না এবং এইভাবে আবর্জনা সংগ্রহযোগ্য নয়, এবং যদি প্রচুর অবজেক্ট তৈরি করা হয় তবে এটি একটি ইস্যুতে পরিণত হতে পারে।
এটি স্ট্রিং ক্লাসের জন্য কাজ করে কারণ এটি নিবিড়ভাবে ব্যবহৃত হয় এবং পুলটি কেবল "ইন্টার্নড" অবজেক্ট দ্বারা গঠিত হয়।
এটি বুলিয়ান শ্রেণীর পক্ষেও ভাল কাজ করে, কারণ এখানে দুটি মাত্র সম্ভাব্য মান রয়েছে।
এবং পরিশেষে এ কারণটিও কারণ শ্রেণি পূর্ণসংখ্যার মান Of (int) -128 থেকে 127 ইনট মানগুলিতে সীমাবদ্ধ।