Class.this এবং জাভাতে এটির মধ্যে পার্থক্য কী


121

এই শ্রেণীর মধ্যে একটি শ্রেণীর উদাহরণ উল্লেখ করার দুটি উপায় আছে। উদাহরণ স্বরূপ:

class Person {
  String name;

  public void setName(String name) {
    this.name = name;
  }

  public void setName2(String name) {
    Person.this.name = name;
  }
}

একটি this.nameঅবজেক্ট ক্ষেত্রের রেফারেন্স ব্যবহার করে তবে অন্যটি className.thisঅবজেক্ট ফিল্ডটি রেফারেন্স করতে ব্যবহার করে। এই দুটি রেফারেন্সের মধ্যে পার্থক্য কী?

উত্তর:


165

এই ক্ষেত্রে, তারা একই রকম। Class.thisযখন আপনি একটি অ স্ট্যাটিক নেস্টেড বর্গ যে চাহিদা তার বাইরের বর্গ দৃষ্টান্ত পড়ুন আছে সিনট্যাক্স দরকারী।

class Person{
    String name;

    public void setName(String name){
        this.name = name;
    }

    class Displayer {
        String getPersonName() { 
            return Person.this.name; 
        }

    }
}

2
পার্সন.থিস.নামের পরিবর্তে যদি আপনি কেবল "রিটার্ন নেম" বলেছিলেন তবে কি এটি কার্যকর হবে না?
অমিত জি

7
@ অ্যামিট জি - এই উদাহরণে হ্যাঁ, এটি কার্যকর হবে। যাইহোক, এমন সময় আছে যখন আপনি কোন "এটি" ব্যবহার করছেন তা পরিষ্কার করা দরকার (যেমন যদি সদস্যের নাম বা পদ্ধতির নামগুলিতে বিবাদ থাকে)। একটি প্রাসঙ্গিক উদাহরণের জন্য মাইকেল এর উত্তর দেখুন।
jtahlorn

1
একটি উদাহরণ হ'ল যখন আপনাকে Person.thisঅন্য কোনও বস্তুর রেফারেন্স দিতে হয়।
বোই

85

এই বাক্য গঠনটি কেবল তখনই প্রাসঙ্গিক হয় যখন আপনি নেস্ট ক্লাস করেন:

class Outer{
    String data = "Out!";

    public class Inner{
        String data = "In!";

        public String getOuterData(){
            return Outer.this.data; // will return "Out!"
        }
    }
}

13

আপনার কেবল অভ্যন্তর শ্রেণীর জন্য ক্লাসের নাম.ইথ ব্যবহার করা উচিত। আপনি যদি সেগুলি ব্যবহার না করে থাকেন তবে এটি নিয়ে চিন্তা করবেন না।


4

Class.thisএকটি স্থিতিশীল নয় রেফারেন্স দরকারী OuterClass

ননস্ট্যাটিক ইনস্ট্যান্ট করতে InnerClass, আপনাকে প্রথমে ইনস্ট্যান্ট করতে হবে OuterClass। সুতরাং একটি ননস্ট্যাটিকের InnerClassসর্বদা এর উল্লেখ থাকে OuterClassএবং এর সমস্ত ক্ষেত্র এবং পদ্ধতিগুলি এর OuterClassজন্য উপলব্ধ InnerClass

public static void main(String[] args) {

        OuterClass outer_instance = new OuterClass();
        OuterClass.InnerClass inner_instance1 = outer_instance.new InnerClass();
        OuterClass.InnerClass inner_instance2 = outer_instance.new InnerClass();
        ...
}

এই উদাহরণে উভয় Innerclassএকই থেকে তাত্ক্ষণিক হয় Outerclassতাই উভয় উভয় একই রেফারেন্স আছে Outerclass

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