JShell হলো একটি কমান্ড-লাইন ইন্টারেক্টিভ টুল যা জাভা ৯ ভার্সনে পরিচয় করানো হয়েছে যা প্রোগ্রামারকে সিম্পল স্টেটমেন্ট, এক্সপ্রেশন, ভেরিয়েবল, মেথড, ক্লাস, ইন্টারফেস ইত্যাদি এক্সিকিউট করতে দেয় main() মেথড ডিক্লেয়ার না করেই।
JShell-এ, কম্পাইলার প্রোগ্রামারকে টাইপকাস্টিং সমস্যা সম্পর্কে এরর থ্রো করে সতর্ক করে। যাইহোক, যদি প্রোগ্রামার এর সম্পর্কে জানেন, তবে এক্সপ্লিসিট কাস্টিং প্রয়োজন হবে। যদি আমাদের ছোট ডেটা ভ্যালু বড় টাইপে কনভার্ট করতে হয়, তবে ইমপ্লিসিট কাস্টিং প্রয়োজন হবে।
ইন্টিজার টাইপকাস্টিং-এর দুটি ধরন রয়েছে:
- লিটারেল-টু-ভেরিয়েবল অ্যাসাইনমেন্ট: উদাহরণস্বরূপ, short s1 = 123456, ডেটা রেঞ্জের বাইরে। এটি কম্পাইল-টাইম-এ জানা যায়, এবং কম্পাইলার এরর ফ্ল্যাগ করে।
- ভেরিয়েবল-টু-ভেরিয়েবল অ্যাসাইনমেন্ট: উদাহরণস্বরূপ, s1 = i1। ওই পর্যায়ে int-এ স্টোর করা ভ্যালু: 4567, যা short টাইপের রেঞ্জের ভেতরে ভালোভাবে আছে, এবং কম্পাইলার কোনো এরর থ্রো করে না। এটি এক্সপ্লিসিট কাস্টিং s1 = (short) i1 দিয়ে প্রি-এম্পটেড হতে পারে।
নিচের কোড স্নিপেটে, আমরা ইমপ্লিসিট এবং এক্সপ্লিসিট উভয় টাইপ কনভার্সন ইমপ্লিমেন্ট করতে পারি।
C:\Users\User>jshell | Welcome to JShell -- Version 9.0.4 | For an introduction type: /help intro jshell> byte b = 128; | Error: | incompatible types: possible lossy conversion from int to byte | byte b = 128; | ^-^ jshell> short s = 123456; | Error: | incompatible types: possible lossy conversion from int to short | short s = 123456; | ^----^ jshell> short s1 = 3456; s1 ==> 3456 jshell> int i1 = 4567; i1 ==> 4567 jshell> s1 = i1; | Error: | incompatible types: possible lossy conversion from int to short | s1 = i1; | ^^ jshell> s1 = (short) i1; s1 ==> 4567 jshell> int num = s1; num ==> 4567