শ্রেণীর নামের সাথে "এটি" ব্যবহার করা


115

আমি অ্যান্ড্রয়েড প্রোগ্রামিং করছি এবং ইন্টেন্টস সম্পর্কে শিখছিলাম, যখন আমি এমন কোনও নির্মাতা দেখলাম যা আমার সি # প্রশিক্ষিত মনের কাছে মজাদার মনে হয়েছিল। কলটি ছিল:

Intent myIntent = new Intent(CurrentActivity.this, NextActivity.class);

উভয় পরামিতি আমার কাছে নতুন। ক্লাসের নামের বাইরে কীভাবে স্থিতিশীল ".এটি" আছে? এটি কি জাভা জিনিস বা কোনও অ্যান্ড্রয়েড জিনিস? আমি ধরে নিচ্ছি যে এটি কেবল "এটি" বলার মতোই, যেহেতু আমি প্রসঙ্গে আছি CurrentActivity, তবে কীভাবে "এই "টিকে ক্লাসের নাম থেকে ডাকা যেতে পারে তা আমি পাই না। এছাড়াও। ".ক্লাস" দেখে মনে হচ্ছে এটি প্রতিবিম্বের জন্য ব্যবহৃত হয়েছে, যার সাথে আমি সি # তে পরিচিত, তবে এর মধ্যে কোনও অন্তর্দৃষ্টিও স্বাগত জানানো হবে।

ধন্যবাদ।

উত্তর:


138

সাধারণত, আপনি কেবল ব্যবহার করতে পারেন this। তবে, কখনও কখনও thisকোনও অভ্যন্তরীণ শ্রেণীর রেফারেন্স দেয় ... সুতরাং, উদাহরণস্বরূপ:

Button button = (Button)findViewById(R.id.ticket_details_sell_ticket);
button.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        // it will be wrong to use only "this", because it would
        // reference the just created OnClickListener object
        Intent login = new Intent(ClassName.this, Login.class);
        startActivityForResult(login, LOGIN_REQUEST);
    }
});

17
আমি দেখি. সুতরাং আমি যদি আপনার উদাহরণে নতুন উদ্বেগের মধ্যে কেবল "এটি" বলে থাকি তবে এটি অনক্লিকলিস্টনার শ্রেণীর "এটি" বোঝাচ্ছে, তবে যেহেতু আমাকে বহিরাগত শ্রেণির রেফারেন্স দেওয়া দরকার সেহেতু এটি বোঝানোর জন্য আমার একটি উপায় প্রয়োজন।
স্কাজ

7
ঠিক। thisসর্বদা অন্তর্নিহিত বর্গ।
ফালমারি

7
এবং প্রশ্নের অন্য অংশের উত্তর দিতে: হ্যাঁ, এটি একটি জাভা জিনিস
ডেকো

1
আমি কেন হতাশ ছিল MyClass.this এবং শুধুমাত্র এই একটি শ্রোতা নিবন্ধন! ধন্যবাদ
luigi7up

3
হাস্যকর! কে জানত যে জাভা thisএতটা জাভাস্ক্রিপ্টের মতো ছিল this? আমার অনুমান যে প্রথম-শ্রেণীর ফাংশন বা ল্যাম্বডাস না করার জন্য আপনি এটি পান :-)
প্যাট

61

একবারে একটি:

প্রথম কনস্ট্রাক্ট একটি বলা হয় যোগ্যতাসম্পন্ন এই । বাক্যবিন্যাসের উদ্দেশ্যটি সেই ক্ষেত্রে যেখানে আপনি একটি অভ্যন্তরীণ শ্রেণিতে রয়েছেন (সাধারণত কোনও বেনামে অভ্যন্তরীণ শ্রেণি) এবং আপনি (বেনামে) অভ্যন্তর শ্রেণীর thisপরিবর্তে বাইরের শ্রেণীর রেফারেন্স দিতে চান this। "যোগ্য এটি" কেবল এমন একটি প্রসঙ্গে ব্যবহার করা thisযেতে পারে যেখানে অস্পষ্ট হবে। জেএলএসের উক্তি "এটি একটি সংকলন-সময় ত্রুটি হয় যদি অভিব্যক্তিটি কোনও শ্রেণি বা ইন্টারফেসে ঘটে যা নিজেই ক্লাস টি বা টি এর অভ্যন্তরীণ শ্রেণী নয়"।

দ্বিতীয় কন্সট্রাক্টকে একটি বলা class literalহয় শ্রেণি অবজেক্টকে সেই ধরণের প্রতিনিধিত্ব করার উপায়। এটি যে কোনও প্রসঙ্গে ব্যবহার করা যেতে পারে।


এটি লক্ষণীয়, যদি এই উত্তরটি এখনও পরিষ্কার ধারণা করা যায় না, তবে এটি কেবল তখনই কাজ করে যখন কোনও বদ্ধ শ্রেণি থাকে এবং আপনি কোনও বাহ্যিক শ্রেণি উল্লেখ করেন। আপনি কেবল "NotInTheStackOfEnclosings.this" ব্যবহার করতে পারবেন না।
ডিয়েগো নুনস

1
@ ডিগো নুনস, এটি সত্য qualified thisনয় class literal। আরও স্পষ্ট করার জন্য আমি আমার উত্তরটি প্রসারিত করেছি।
যিশাই

14

"Classname.this" বাক্য গঠনটি অভ্যন্তর শ্রেণীর জন্য। আপনি যদি "আউটারক্লাস" টাইপের সংলগ্ন উদাহরণটি উল্লেখ করতে চান তবে আপনি এটি "আউটারক্লাস.থিস" হিসাবে করেন।

NextActivity.class কেবল ক্লাস অবজেক্ট যা শ্রেণি "NextActivity" বর্ণনা করে।



8

ClassName.this একটি অভ্যন্তরীণ শ্রেণীর বাইরের শ্রেণীর বর্তমান উদাহরণটি উল্লেখ করতে ব্যবহৃত হয়।


এবং অবশ্যই অন্যভাবে?
কোডিমানিক্স

5
<ClassName>.this

ঘেরযুক্ত ক্লাসের বর্তমান উদাহরণটি উল্লেখ করতে নেস্ট ক্লাসে ব্যবহৃত হয়, যেহেতু `এই 'কীওয়ার্ডটি নীড় শ্রেণীর উদাহরণকে বোঝায়।

পাবলিক ক্লাস সিহট্ট { ক্লাস নেস্টেডসিট { অকার্যকর ডেমো এটি () { সিস্টেম মাত্রই ভুল করে println ( " : Siht.this 'এর একটি দৃষ্টান্ত হল" + + Siht এই getClass ()। getName ; ()) } }   
      
         
            this' is an instance of: " + 
                            this.getClass().getName());
            System.err.println(" 
                            
        
    

void demoThis() {
    new java.lang.Object() {
        void demoThis() {
            System.err.println("`this' is an instance of: " + 
                            this.getClass().getName());
            System.err.println("`Siht.this' is an instance of: " +
                            Siht.this.getClass().getName());
        }
    }.demoThis();
    new NestedSiht().demoThis();
}

public static void main(String [] args) {
    new Siht().demoThis();
}

}


0

এটি শুধুমাত্র বিভ্রান্তিকর কারণ আপনি যখন " MainActivity.this " ব্যবহার করেন তখন মনে হয় আপনি ক্লাসের কথা উল্লেখ করছেন, বস্তুটি নয়। বাস্তবে আপনি যখন "এটি" ব্যবহার করেন আপনি সর্বদা বর্তমান বস্তুর উল্লেখ করছেন, যেমন জাভা সে ডকুমেন্টেশন বলে:

https://docs.oracle.com/javase/tutorial/java/javaOO/thiskey.html

একটি দৃষ্টান্ত পদ্ধতি বা কন্সট্রাকটর মধ্যেই এই একটি রেফারেন্স বর্তমান objec করার বস্তু যার পদ্ধতি বা কন্সট্রাকটর বলা হচ্ছে - টি। আপনি এটি ব্যবহার করে একটি উদাহরণ পদ্ধতি বা কোনও নির্মাণকারীর মধ্যে থেকে বর্তমান অবজেক্টের যে কোনও সদস্যকে উল্লেখ করতে পারেন।

এটি কেবল কৃত্রিমভাবে অদ্ভুত।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.