সি-স্টাইলের কাস্ট অপারেটরের দুষ্টতা সম্পর্কে আমার সি ++ দিন পড়ানোর পরে আমি প্রথমে সন্তুষ্ট হয়ে জানতে পেরেছিলাম যে জাভা 5 তে java.lang.Class
একটি cast
পদ্ধতি অর্জন করেছে ।
আমি ভেবেছিলাম অবশেষে weালাইয়ের সাথে আমাদের আচরণ করার একটি ওও উপায় আছে।
দেখা যাচ্ছে Class.cast
যে static_cast
সি ++ এর মতো নয়। এটা আরও ভালো লেগেছে reinterpret_cast
। এটি সংকলন ত্রুটি তৈরি করবে না যেখানে এটি প্রত্যাশিত এবং পরিবর্তে রানটাইম স্থগিত করবে। বিভিন্ন আচরণের প্রদর্শনের জন্য এখানে একটি সাধারণ পরীক্ষার কেস।
package test;
import static org.junit.Assert.assertTrue;
import org.junit.Test;
public class TestCast
{
static final class Foo
{
}
static class Bar
{
}
static final class BarSubclass
extends Bar
{
}
@Test
public void test ( )
{
final Foo foo = new Foo( );
final Bar bar = new Bar( );
final BarSubclass bar_subclass = new BarSubclass( );
{
final Bar bar_ref = bar;
}
{
// Compilation error
final Bar bar_ref = foo;
}
{
// Compilation error
final Bar bar_ref = (Bar) foo;
}
try
{
// !!! Compiles fine, runtime exception
Bar.class.cast( foo );
}
catch ( final ClassCastException ex )
{
assertTrue( true );
}
{
final Bar bar_ref = bar_subclass;
}
try
{
// Compiles fine, runtime exception, equivalent of C++ dynamic_cast
final BarSubclass bar_subclass_ref = (BarSubclass) bar;
}
catch ( final ClassCastException ex )
{
assertTrue( true );
}
}
}
সুতরাং, এই আমার প্রশ্ন।
Class.cast()
জেনারিক্সের জমিতে নিষিদ্ধ করা উচিত ? সেখানে এটির বেশ কয়েকটি বৈধ ব্যবহার রয়েছে।- সংকলকগণ যখন
Class.cast()
ব্যবহৃত হয় তখন সংকলন ত্রুটিগুলি উত্পন্ন করা উচিত এবং সংকলনের সময় অবৈধ পরিস্থিতি নির্ধারণ করা যেতে পারে? - জাভা কি সি ++ এর অনুরূপ ভাষা নির্মাণের জন্য একটি কাস্ট অপারেটর সরবরাহ করতে পারে?
Class.cast()
যখন অবৈধ অবস্থার কম্পাইল সময়ে নির্ধারিত করা যেতে পারে। সেক্ষেত্রে প্রত্যেকে কিন্তু আপনি কেবল স্ট্যান্ডার্ড কাস্ট অপারেটর ব্যবহার করেন। (3) জাভাতে ভাষা নির্মাণ হিসাবে কাস্ট অপারেটর থাকে। এটি সি ++ এর মতো নয়। এর কারণ জাভার অনেকগুলি ভাষা নির্মান সি ++ এর মতো নয়। অতিমাত্রায় মিল থাকলেও জাভা এবং সি ++ একেবারেই আলাদা।