ইন্টারফেসে স্থির এবং ডিফল্ট পদ্ধতির মধ্যে পার্থক্য


107

আমি ইন্টারফেসের মাধ্যমে শিখছিলাম যখন আমি লক্ষ্য করেছি যে আপনি এখন কোনও ইন্টারফেসে স্থির এবং ডিফল্ট পদ্ধতিগুলি সংজ্ঞায়িত করতে পারেন।

public interface interfacesample2 {
    public static void method() {
        System.out.println("hello world");
    }

    public default void menthod3() {
        System.out.println("default print");
    }
}

দয়া করে দুজনের পার্থক্যটি ব্যাখ্যা করুন এবং এটির জন্য আমরা কখন ব্যবহার করব এটির উদাহরণ রয়েছে। ইন্টারফেসে কিছুটা বিভ্রান্ত।


4
আপনি জাভা টিউটোরিয়ালে স্ট্যাটিক পদ্ধতিগুলি পড়ার চেষ্টা করেছিলেন?
দাউদ ইবনে কেরেম

1
সুতরাং আপনি কোনও স্ট্যাটিক পদ্ধতি ওভাররাইড করতে সক্ষম হবেন না এমন অংশটি হারিয়েছেন?
দাউদ ইবনে কেরেম

1
ইন্টারফেসে একই বুঝতে পারেন নি
ভিপিন মেনন

9
স্ট্যাটিক পদ্ধতিটি ইন্টারফেসের স্থিতিশীল সদস্য, ক্যান্টকে ওভাররাইড করা যায় না (শ্রেণীর মতো), ডিফল্ট পদ্ধতিটি এমন default implementationএকটি পদ্ধতি যা ওভাররাইড করা হতে পারে।
শাইল016

2
শুধু ভাবছি: কেন আপনি এখানে কোনও উত্তর গ্রহণ করেন নি?
ঘোস্টটিক

উত্তর:


116

জাভা 8 এ স্ট্যাটিক এবং ডিফল্ট পদ্ধতির মধ্যে পার্থক্য:

1) ডিফল্ট পদ্ধতিগুলি ক্লাস প্রয়োগকারী ক্ষেত্রে ওভাররাইড করা যেতে পারে , যখন স্থির থাকতে পারে না

২) স্ট্যাটিক পদ্ধতিটি কেবল ইন্টারফেস শ্রেণীর অন্তর্গত , সুতরাং আপনি কেবল ইন্টারফেস শ্রেণিতে স্থিতিশীল পদ্ধতিটি আহ্বান করতে পারবেন, এই ইন্টারফেস প্রয়োগকারী শ্রেণীর উপর নয়, দেখুন:

public interface MyInterface {
    default void defaultMethod(){
        System.out.println("Default");
    }

    static void staticMethod(){
        System.out.println("Static");
    }    
}

public class MyClass implements MyInterface {

    public static void main(String[] args) {

        MyClass.staticMethod(); //not valid - static method may be invoked on containing interface class only
        MyInterface.staticMethod(); //valid
    }
}

3) ক্লাস এবং ইন্টারফেস উভয় একই নামের স্থিতিশীল পদ্ধতি থাকতে পারে , এবং অন্যটি ওভাররাইড করে না!

public class MyClass implements MyInterface {

    public static void main(String[] args) {

        //both are valid and have different behaviour
        MyClass.staticMethod();
        MyInterface.staticMethod();
    }

    static void staticMethod(){
        System.out.println("another static..");
    }
}

2
তবে 'স্থির' কেন? জাভা 8 এ এটি কী উদ্দেশ্যে কাজ করে?
শশাঙ্ক বিবেক

4
স্ট্যাটিক কীওয়ার্ডের উদ্দেশ্য পরিবর্তিত হয় নি - শ্রেণি স্তরের সদস্যদের সংজ্ঞা দিতে: ক্ষেত্র, পদ্ধতি ইত্যাদি Java জাভা 8-এ এই আচরণটি ইন্টারফেসে প্রসারিত হয়েছিল, সুতরাং তারা ক্লাসগুলির সাথে আরও মিল হয়ে যায় এবং এখন বেশিরভাগ পরিস্থিতিতে ক্লাস প্রতিস্থাপন করতে পারে।
স্টিংগার

হ্যাঁ, তবে আমরা ওভাররাইডের পরিবর্তে ইন্টারফেস স্থিতিশীল পদ্ধতিটি আড়াল করতে পারি, .... আমি কেবল মনে করি উভয়ই একই purpose( একটি সাধারণ বাস্তবায়ন ব্যবহার করুন ) পূরণ করে এবং অস্পষ্টতা implementing the logic again in subclass ( ওভাররাইডিং, লুকিয়ে রেখে ) সমাধান করে। কেবলমাত্র বোধগম্য কারণটি হ'ল [স্থিত ইন্টারফেস পদ্ধতিগুলি উত্তরাধিকার সূত্রে প্রাপ্ত নয়] ( স্ট্যাকওভারফ্লো.com / প্রশ্নগুলি / 25169175/… ) এবং সেইজন্য আমরা সাবক্লাস উদাহরণ ব্যবহার করে তাদের কল করতে পারি না।
অমরনাথ হরিশ

29

একটি স্ট্যাটিক পদ্ধতি এমন একটি পদ্ধতি যা 'নেমস্পেস' শ্রেণিতে প্রয়োগ হয়, তাই কথা বলতে speak সুতরাং ইন্টারফেসের একটি staticপদ্ধতি অ্যাক্সেস করে । নোট করুন যে ফাংশন কলটি ইন্টারফেসের কোনও নির্দিষ্ট ক্ষেত্রে প্রয়োগ হয় না ।fooInterfaceInterface.foo()

barঅন্যদিকে একটি ডিফল্ট বাস্তবায়নকে বলা হয়

Interface x = new ConcreteClass();
x.bar();

একটি staticইন্টারফেস পদ্ধতি thisভেরিয়েবল সম্পর্কে জানতে পারে না , তবে একটি ডিফল্ট বাস্তবায়ন করতে পারে।


19

1. উভয়ের পার্থক্য ব্যাখ্যা কর

স্ট্যাটিক ইন্টারফেস পদ্ধতিগুলি স্ট্যাটিক ক্লাস পদ্ধতির মতো (এখানে সেগুলি কেবল ইন্টারফেসের অন্তর্ভুক্ত)। যেখানে ডিফল্ট ইন্টারফেস পদ্ধতি default implementationইন্টারফেসের পদ্ধতি সরবরাহ করে (যা ক্লাস প্রয়োগকারী হতে পারে override)
তবে মনে রাখবেন যে কোনও শ্রেণির ক্ষেত্রে implementing more than one interface with same defaultপদ্ধতি স্বাক্ষর হয় তখন বাস্তবায়নকারী শ্রেণিneeds to override the default method

আপনি নীচে একটি সাধারণ উদাহরণ খুঁজে পেতে পারেন (বিভিন্ন ক্ষেত্রে DIY করতে পারেন)

public class Test {
    public static void main(String[] args) {
        // Accessing the static member
        I1.hello();

        // Anonymous class Not overriding the default method
        I1 t = new I1() {
            @Override
            public void test() {
                System.out.println("Anonymous test");
            }
        };
        t.test();
        t.hello("uvw");

        // Referring to class instance with overridden default method
        I1 t1 = new Test2();
        t1.test();
        t1.hello("xyz");

    }
}

interface I1 {

    void test();
    //static method
    static void hello() {
        System.out.println("hello from Interface I1");
    }

    // default need not to be implemented by implementing class
    default void hello(String name) {
        System.out.println("Hello " + name);
    }
}

class Test2 implements I1 {
    @Override
    public void test() {
        System.out.println("testing 1234...");
    }

    @Override
    public void hello(String name) {
        System.out.println("bonjour" + name);
    }
}

২. আমরা যখন এটি ব্যবহার করব তখন দুর্দান্ত লাগবে।

এটি আপনার সমস্যার বিবৃতিতে নির্ভর করে। আমি বলব ডিফল্ট পদ্ধতিগুলি কার্যকর, যদি আপনার চুক্তিটির সমস্ত শ্রেণিতে আপনার নির্দিষ্টকরণের কোনও পদ্ধতির জন্য একই প্রয়োগের প্রয়োজন হয়, বা এটি Adapterক্লাসগুলির মতো ব্যবহার করা যেতে পারে ।

এখানে একটি ভাল পঠন রয়েছে: /software/233053/why-were-default-and-static-methods-added-to-interfaces-in-java-8-When-we-read

এছাড়াও ওরাকল ডকের নীচে বিদ্যমান ইন্টারফেসগুলি বিকশিত করার জন্য ডিফল্ট এবং স্থির পদ্ধতিগুলি ব্যাখ্যা করে:

নতুন ডিফল্ট বা স্ট্যাটিক পদ্ধতিতে বর্ধিত ইন্টারফেস প্রয়োগকারী ক্লাসগুলি ব্যবহারকারীর অতিরিক্ত পদ্ধতি মেটাতে তাদের পরিবর্তন বা পুনরায় সংকলন করতে হবে না।

http://docs.oracle.com/javase/tutorial/java/IandI/nogrow.html


আমার সন্দেহ আছে. ইন্টারফেসের কোনও অবজেক্ট তৈরি করা কি সম্ভব? আপনার
কোডটিতে

@ হ্যাকিনেট দয়া করে সেই বিবৃতিটি নিয়ে জাভা মন্তব্যটি পড়ুন। বেনামে ক্লাস সম্পর্কে পড়ুন দয়া করে। আশা করি যে আপনাকে সাহায্য করবে।
শাইল016

12

এখানে আমার মতামত:

ইন্টারফেসে স্থির পদ্ধতি :

  • আপনি এটিকে সরাসরি কল করতে পারেন (ইন্টারফেসটা.স্ট্যাটিক ম্যাথড ())

  • সাব-ক্লাস ওভাররাইড করতে সক্ষম হবে না।

  • উপ-শ্রেণীর স্ট্যাটিকমেথডের মতো একই নামের পদ্ধতি থাকতে পারে

ইন্টারফেসে ডিফল্ট পদ্ধতি :

  • আপনি সরাসরি এটি কল করতে পারবেন না।

  • সাব-ক্লাস এটিকে ওভাররাইড করতে সক্ষম হবে

সুবিধা:

  • স্থির পদ্ধতি: ইউটিলিটি পদ্ধতির জন্য আপনার আলাদা শ্রেণি তৈরি করার দরকার নেই।

  • ডিফল্ট পদ্ধতি: ডিফল্ট পদ্ধতিতে সাধারণ কার্যকারিতা সরবরাহ করুন।


8

এই লিঙ্কটিতে কিছু দরকারী অন্তর্দৃষ্টি রয়েছে, সেগুলির কয়েকটি এখানে তালিকাভুক্ত করেছে।

ডিফল্ট এবং স্থিতিশীল পদ্ধতিগুলি ইন্টারফেস এবং বিমূর্ত শ্রেণীর মধ্যে পার্থক্য কমিয়ে দেয় ।

ইন্টারফেস ডিফল্ট পদ্ধতি:

  • এটি ইউটিলিটি ক্লাসগুলি এড়াতে সহায়তা করে, যেমন সমস্ত সংগ্রহ শ্রেণি পদ্ধতি ইন্টারফেসে নিজেই সরবরাহ করা যেতে পারে।
  • এটি বাস্তবায়ন ক্লাস ভাঙার ভয় না করে ইন্টারফেসগুলি প্রসারিত করতে সহায়তা করে।

ইন্টারফেস স্থির পদ্ধতি:

  • এগুলি ইন্টারফেসের অংশ, আমরা শ্রেণি অবজেক্টগুলি প্রয়োগের জন্য এটি ব্যবহার করতে পারি না।
  • এটি প্রয়োগকারী ক্লাসগুলিকে ওভাররাইড না করার মাধ্যমে সুরক্ষা সরবরাহ করতে সহায়তা করে।

আরেকটি দরকারী রেফারেন্স উদ্ধৃত করতে চান ।


3

ইন্টারফেস ডিফল্ট পদ্ধতি:

এটি ইউটিলিটি ক্লাসগুলি এড়াতে সহায়তা করে, যেমন সমস্ত সংগ্রহ শ্রেণি পদ্ধতি ইন্টারফেসে নিজেই সরবরাহ করা যেতে পারে।

এটি বাস্তবায়ন ক্লাস ভাঙার ভয় না করে ইন্টারফেসগুলি প্রসারিত করতে সহায়তা করে।

ইন্টারফেস স্থির পদ্ধতি:

এগুলি ইন্টারফেসের অংশ, আমরা শ্রেণি অবজেক্টগুলি প্রয়োগের জন্য এটি ব্যবহার করতে পারি না।

এটি প্রয়োগকারী ক্লাসগুলিকে ওভাররাইড না করার মাধ্যমে সুরক্ষা সরবরাহ করতে সহায়তা করে।

এখন কীভাবে স্থিতিশীল পদ্ধতি সুরক্ষা সরবরাহ করে। আসুন একটি উদাহরণ দেখুন।

interface MyInterface {
    /*
     * This is a default method so we need not to implement this method in the implementation classes
     */
    default void newMethod() {
        System.out.println("Newly added default method in Interface");
    }

    /*
     * This is a static method. Static method in interface is similar to default method except that we cannot override them in the implementation classes. Similar to default methods, we need to implement these methods in implementation classes so we can safely add them to the existing interfaces.
     */
    static void anotherNewMethod() {
        System.out.println("Newly added static method in Interface");
    }

    /*
     * Already existing public and abstract method We must need to implement this method in implementation classes.
     */
    void existingMethod(String str);
}

public class Example implements MyInterface {
    // implementing abstract method
    public void existingMethod(String str) {
        System.out.println("String is: " + str);
    }

    public void newMethod() {
        System.out.println("Newly added default method in Class");
    }

    static void anotherNewMethod() {
        System.out.println("Newly added static method in Class");
    }

    public static void main(String[] args) {
        Example obj = new Example();

        // calling the default method of class
        obj.newMethod();
        // calling the static method of class

        obj.anotherNewMethod();

        // calling the static method of interface
        MyInterface.anotherNewMethod();

        // calling the abstract method of interface
        obj.existingMethod("Java 8 is easy to learn");

    }
}

এখানে obj.newMethod();মুদ্রণ শ্রেণীর বাস্তবায়ন যুক্তি, এর অর্থ আমরা প্রয়োগের শ্রেণীর ভিতরে সেই পদ্ধতির যুক্তি পরিবর্তন করতে পারি।

তবে obj.anotherNewMethod();মুদ্রণ ক্লাস বাস্তবায়নের যুক্তি, তবে ইন্টারফেস প্রয়োগের পরিবর্তন হয়নি। সুতরাং যদি কোনও পদ্ধতির ভিতরে কোনও এনক্রিপশন-ডিক্রিপশন যুক্তি যুক্ত থাকে তবে আপনি পরিবর্তন করতে পারবেন না।


এই উত্তরটি দেখে মনে হচ্ছে এটি কোথাও ভাল চলেছে ,,, তবে হঠাৎ করেই বুম! শেষে কোনও অর্থবহ ব্যাখ্যা নেই। কিন্তু পরিবর্তিত ইন্টারফেস বাস্তবায়ন এর অর্থ কী?
অমরনাথ হরিশ

2

ওরাকলসের জাভাদোকস অনুসারে: http://docs.oracle.com/javase/tutorial/java/IandI/defaultmethods.html

ডিফল্ট পদ্ধতিগুলি আপনাকে আপনার লাইব্রেরির ইন্টারফেসগুলিতে নতুন কার্যকারিতা যুক্ত করতে এবং সেই ইন্টারফেসগুলির পুরানো সংস্করণগুলির জন্য লিখিত কোডের সাথে বাইনারি সামঞ্জস্যতা নিশ্চিত করতে সক্ষম করে।

স্ট্যাটিক পদ্ধতি হ'ল এমন একটি পদ্ধতি যা শ্রেণীর সাথে সম্পর্কিত যেখানে এটি কোনও বস্তুর পরিবর্তে সংজ্ঞায়িত হয়। শ্রেণীর প্রতিটি উদাহরণ তার স্থিতিশীল পদ্ধতিগুলি ভাগ করে দেয়।

সাধারণত, ইন্টারফেসে স্থির পদ্ধতি হেল্পার পদ্ধতি হিসাবে ব্যবহৃত হয় যখন ডিফল্ট পদ্ধতিটি সেই ইন্টারফেস প্রয়োগ করে এমন শ্রেণীর জন্য ডিফল্ট রূপায়ণ হিসাবে ব্যবহৃত হয়।

উদাহরণ:

interface IDemo {

    //this method can be called directly from anywhere this interface is visible
    static int convertStrToInt(String numStr) {
       return Integer.parseInt(numStr);
    }


    //getNum will be implemented in a class
    int getNum();       

    default String numAsStr() {
       //this.getNum will call the class's implementation
       return Integer.toString(this.getNum());
    }   

}

1

অনুযায়ী Java14 JLS ডক:

ডিফল্ট পদ্ধতি:

  • এটি একটি উদাহরণ পদ্ধতি যা ডিফল্ট সংশোধক সহ একটি ইন্টারফেসে ঘোষণা করা হয়

  • এটি শুধুমাত্র বাস্তবায়নকারী শ্রেণীর উদাহরণ দিয়ে অ্যাক্সেস করা যায়

  • এর শরীরটি সর্বদা একটি ব্লক দ্বারা প্রতিনিধিত্ব করা হয়, যা পদ্ধতিটিকে ওভাররাইড না করে কোনও প্রয়োগকারী শ্রেণীর জন্য একটি ডিফল্ট বাস্তবায়ন বা আচরণ সরবরাহ করে

  • এটি কখনও স্থির বা ব্যক্তিগত হতে পারে না

স্থির পদ্ধতি:

  • শ্রেণি স্ট্যাটিক পদ্ধতির মতো এটি কোনও নির্দিষ্ট অবজেক্টের রেফারেন্স ছাড়াই ইন্টারফেসের মাধ্যমে আহ্বান করা যেতে পারে

  • স্ট্যাটিক পদ্ধতিটি ব্যক্তিগত হতে পারে

  • বাস্তবায়নকারী শ্রেণি স্থির পদ্ধতিতে অ্যাক্সেস করতে পারে না

নীচের উদাহরণ কোডটির সাহায্যে এটি বুঝতে দিন:

            public interface MyInterface {
        
            private void privateMethod() {
                System.out.println("Hi, this is privateMethod");
            }
        
            private static void staticPrivateMethod() {
                System.out.println("Hi, this is staticPrivateMethod");
            }
        
            static void staticMethod() {
                //privateMethod();    // Non-static method cannot be referenced from a static contex
                System.out.println("Hi, this is staticMethod");
                staticPrivateMethod();
            }
        
            default void defaultMethod() {
                System.out.println("Hi, this is defaultMethod");
            }
        
        }
    
    public class MyInterfaceImpl implements MyInterface{
        public static void main(String[] args) {
    
            MyInterface.staticMethod();
            // myInterface.staticMethod(); // Not allowed
    
            MyInterface myInterface = new MyInterfaceImpl();
            myInterface.defaultMethod();
            // MyInterface.defaultMethod(); // Not allowed
    
        }
    }

0

আমরা কার্যকর করতে পারি না Interfacesample2.menthod3();কারণ এটি স্থির পদ্ধতি নয়। কার্যকর করার জন্য method3()আমাদের Interfacesample2ইন্টারফেসের একটি উদাহরণ প্রয়োজন ।

দয়া করে নিম্নলিখিত ব্যবহারিক উদাহরণটি সন্ধান করুন:

public class Java8Tester {
   public static void main(String args[]){
      // Interfacesample2.menthod3(); Cannot make a static reference to the non-static method menthod3 from the type Interfacesample2

      new Interfacesample2(){ }.menthod3();// so in order to call default method we need an instance of interface

       Interfacesample2.method(); // it
   }
}

interface Interfacesample2 {
    public static void method() {
        System.out.println("hello world");
    }

    public default void menthod3() {
        System.out.println("default print");
    }
}

0

জাভা 8 ইন্টারফেস শুরু করতে স্থির পদ্ধতিও থাকতে পারে। ক্লাসের স্ট্যাটিক পদ্ধতির মতো ইন্টারফেসের নাম ব্যবহার করে একটি ইন্টারফেসের স্থির পদ্ধতি বলা যেতে পারে।

উদাহরণ

public interface Calculator {
    int add(int a, int b);
    int subtract(int a, int b);

    default int multiply(int a, int b) {
         throw new RuntimeException("Operation not supported. Upgrade to UltimateCalculator");
    }

    static void display(String value) {
        System.out.println(value);
    }
}

স্থিতিশীল এবং ইন্টারফেসের ডিফল্ট পদ্ধতির মধ্যে পার্থক্য হ'ল ডিফল্ট পদ্ধতিটি উত্তরাধিকারকে সমর্থন করে তবে স্থির পদ্ধতিটি তা করে না। ডিফল্ট পদ্ধতিটি উত্তরাধিকারসূত্রে ইন্টারফেসে ওভাররাইড করা যায়।

ইন্টারফেস ডিফল্ট পদ্ধতি এবং স্ট্যাটিক পদ্ধতি সম্পর্কে এখানে ভাল পড়ুন। জাভা 8 এ ইন্টারফেস ডিফল্ট পদ্ধতি


0

সমস্ত ভাল উত্তর এখানে। আমি ইন্টারফেসে স্থির ফাংশনটির আরেকটি ব্যবহারিক ব্যবহার যুক্ত করতে চাই। টিপটি বইটি থেকে আসছে - ইফেক্টিভ জাভা, অধ্যায় 2-এ জোশুয়া ব্লচের রচিত তৃতীয় সংস্করণ: অবজেক্টটি তৈরি করা এবং ধ্বংস করা।

Static functions can be used for static factory methods. 

স্ট্যাটিক ফ্যাক্টরি পদ্ধতি এমন একটি পদ্ধতি যা কোনও বস্তু ফেরত দেয়। তারা কনস্ট্রাক্টরের মতো কাজ করে। নির্দিষ্ট ক্ষেত্রে স্ট্যাটিক ফ্যাক্টরি পদ্ধতিটি কনস্ট্রাক্টর ব্যবহারের চেয়ে বেশি পঠনযোগ্য কোড সরবরাহ করে।

বইটি থেকে উদ্ধৃত করা - জোশুয়া ব্লচের রচনা কার্যকর জাভা, তৃতীয় সংস্করণ

জাভা 8 এর আগে, ইন্টারফেসের স্থির পদ্ধতি থাকতে পারে না। কনভেনশন অনুসারে, টাইপ নামের একটি ইন্টারফেসের স্থিতিশীল কারখানার পদ্ধতিগুলি টাইপগুলির নামহীন সঙ্গী শ্রেণিতে (আইটেম 4) রাখা হয়েছিল।

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

উদাহরণস্বরূপ, জাভা কালেকশন ফ্রেমওয়ার্কের তার ইন্টারফেসগুলির পঁচাতালটি ইউটিলিটি বাস্তবায়ন রয়েছে, যা অপরিবর্তনীয়যোগ্য সংগ্রহগুলি, সিঙ্ক্রোনাইজড সংগ্রহগুলি এবং এই জাতীয় পছন্দ সরবরাহ করে। এগুলির প্রায় সমস্ত বাস্তবায়ন স্থায়ী ফ্যাক্টরি পদ্ধতির মাধ্যমে একটি অবিচ্ছিন্ন শ্রেণিতে (java.util. সংগ্রহ) রফতানি করা হয়। প্রত্যাবর্তিত অবজেক্টের ক্লাসগুলি সমস্ত অ-প্রজাতন্ত্র।

আরও তিনি ব্যাখ্যা করেছেন যে এপিআই কেবল ছোট নয়, এটি কোড পঠনযোগ্যতা এবং এপিআই স্বাচ্ছন্দ্যে সহায়তা করে ..

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

এখানে java.util. সংগ্রহ সংগ্রহ শ্রেণীর স্থিতির একটি পদ্ধতি:

public static <T> Collection<T> unmodifiableCollection(Collection<? extends T> c) {
    return new UnmodifiableCollection<>(c);
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.