java - meaning - আমরা একটি ইন্টারফেস পদ্ধতি বাস্তবায়ন oververide করা উচিত?




interface meaning (10)

@Override ইন্টারভারাইডের সাথে একটি ইন্টারফেস পদ্ধতি প্রয়োগ করার পদ্ধতিটি কি উচিত?

ওভার्राাইড টীকাটির জাভাডোক বলেছেন:

নির্দেশ করে যে একটি পদ্ধতি ঘোষণা একটি সুপারক্লাসে একটি পদ্ধতি ঘোষণাকে ওভাররাইড করার উদ্দেশ্যে করা হয়। যদি কোনও পদ্ধতিটি এই টীকাটির প্রকারের সাথে উদ্দীপ্ত হয় তবে একটি সুপারক্লাস পদ্ধতিকে ওভাররাইড না করে, কম্পাইলারদের একটি ত্রুটির বার্তা তৈরি করতে হবে।

আমি মনে করি না যে একটি ইন্টারফেস টেকনিক্যালি একটি superclass হয়। অথবা এটা?

প্রশ্ন সম্পাদন

https://code.i-harness.com


Java8 এ জাভাডোকটি পড়ার মাধ্যমে, আপনি ইন্টারফেস ওভার्राাইড ঘোষণার পরে নিম্নলিখিতটি খুঁজে পেতে পারেন:

যদি এই টীকাটির সাথে কোনও পদ্ধতিতে টীকা দেওয়া হয় তবে কমপ্লেক্সগুলির কমপক্ষে নিম্নোক্ত শর্তগুলির মধ্যে একটি হওয়া পর্যন্ত ত্রুটি বার্তা তৈরি করতে হবে:

  • পদ্ধতি supertype ঘোষণা একটি পদ্ধতি override বা বাস্তবায়ন করা হয়।
  • {@Linkplain অবজেক্ট} এ ঘোষিত যেকোনো পাবলিক পদ্ধতির সমতুল্য-সমতুল্য পদ্ধতির একটি স্বাক্ষর রয়েছে।

সুতরাং, অন্তত java8 তে, আপনার ইন্টারফেস পদ্ধতি বাস্তবায়নের জন্য @ ওভার্রাইড ব্যবহার করা উচিত।


আপনার নিজস্ব ক্লাস থেকে উত্তরাধিকারী আপনার নিজস্ব পদ্ধতি overriding সাধারণত একটি আইডি ব্যবহার করে refactorings বিরতি না। কিন্তু আপনি যদি লাইব্রেরি থেকে উত্তরাধিকারসূত্রে প্রাপ্ত একটি পদ্ধতিকে ওভাররাইড করেন তবে এটি ব্যবহার করার পরামর্শ দেওয়া হয়। আপনি যদি না করেন, তবে আপনি পরবর্তী লাইব্রেরী পরিবর্তনের কোনও ত্রুটি পাবেন না, তবে একটি ভাল লুকানো বাগ।


আমার জন্য, প্রায়ই বার কয়েকটি কোড কম্পাইল করার জন্য জাভা 6 এর একমাত্র কারণ প্রয়োজন। এটি মূল্যহীন কিনা নিশ্চিত না।



ইন্টারফেসের জন্য @ ওভার্রাইড ব্যবহার করে কম্পাইল ত্রুটি ঘটেছে। সুতরাং, আমি এটা অপসারণ করতে হয়েছে।

ত্রুটি বার্তা গিয়েছিল " The method getAllProducts() of type InMemoryProductRepository must override a superclass method "।

এটি " One quick fix available: Remove @Override annotation. "

এটি ছিল eclipse 4.6.3, জেডিকে 1.8.0_144।


এটা JDK সঙ্গে একটি সমস্যা নয়। ইক্লিপস হিলিওসে, এটি বাস্তবায়ন ইন্টারফেস পদ্ধতিগুলির জন্য @ ওভার্রাইড এনটাইটেশন, যাহাই যাই হোক না কেন JDK 5 বা 6। Eclipse গ্যালিলিওর জন্য, @ ওভার্রাইড টীকাটি অনুমোদিত নয়, যেটি JDK 5 বা 6।


যখন আপনি এটি একটি ইন্টারফেস প্রয়োগ করে এমন একটি ক্লাস তৈরির সময় "আনলিমিটেড পদ্ধতিগুলি জেনারেট" করার জন্য এটি যখন @Override যোগ করবেন তখন নিজেকে গ্রহন করবে।


যখনই সম্ভব @ververide ব্যবহার করা উচিত। এটি তৈরি করা থেকে সহজ ভুল প্রতিরোধ করে। উদাহরণ:

class C {
    @Override
    public boolean equals(SomeClass obj){
        // code ...
    }
}

এটি কম্পাইল হয় না কারণ এটি সঠিকভাবে public boolean equals(Object obj) ওভাররাইড না করে।

একই ইন্টারফেস বাস্তবায়নের জন্য ( শুধুমাত্র 1.6 এবং উপরে ) পদ্ধতিতে যেতে হবে অথবা একটি সুপার ক্লাসের পদ্ধতিকে ওভাররাইড করবে।


যদি এটি উপলভ্য হয় তবে আপনি সর্বদা @ @Override সাথে পদ্ধতিগুলি @Override করতে হবে।

জেডিকে 5 এর মধ্যে এই উপাধিগুলি জেডকে 6, এবং 7-তে অতিথির পদ্ধতিগুলিকে বোঝায়, এটি সুপারক্লাসের পদ্ধতিগুলি পুনর্বহাল করার পদ্ধতি এবং ইন্টারফেসের পদ্ধতিগুলি বাস্তবায়ন করে। পূর্বে যেমন উল্লেখ করা হয়েছে, এটি কম্পাইলারকে এমন ত্রুটিগুলি ধরতে দেয় যেখানে আপনি মনে করেন যে আপনি কোনও পদ্ধতিকে ওভাররাইড করছেন (বা বাস্তবায়ন করছেন), তবে আসলে এটি একটি নতুন পদ্ধতি (বিভিন্ন স্বাক্ষর) নির্ধারণ করছে।

equals(Object) বনাম equals(YourObject) উদাহরণ বিন্দুতে একটি আদর্শ কেস, তবে একই যুক্তি ইন্টারফেস বাস্তবায়নের জন্য তৈরি করা যেতে পারে।

আমি ইন্টারফেসের প্রয়োগকরণ পদ্ধতিগুলিকে টীকা দেওয়ার বাধ্যতামূলক কারণটি কল্পনা করতে চাই যে JDK 5 কম্পাইল ত্রুটি হিসাবে পতাকাঙ্কিত। যদি জেডিকে 6 এই টীকাটি বাধ্যতামূলক করে তোলে তবে এটি পিছনে সামঞ্জস্য বজায় থাকবে।

আমি ইক্লিপ্স ব্যবহারকারী নই, তবে অন্যান্য আইডিইএস (ইনন্টেলিজ) -এ, @ ওভার্রাইড এনটাইটেশনটি কেবলমাত্র জুডিকে 6+ প্রকল্প হিসাবে সেট করা হলে ইন্টারফেস পদ্ধতি বাস্তবায়নের সাথে যুক্ত করা হয়। আমি যে eclipse অনুরূপ কল্পনা করবে।

যাইহোক, আমি এই ব্যবহারের জন্য একটি ভিন্ন টীকা দেখতে পছন্দ করতাম, হয়তো একটি @Implements টীকা।


যদি কোন কংক্রিট বর্গ একটি বিমূর্ত পদ্ধতিকে ওভাররাইড করছে না, তাহলে বাস্তবায়ন করার জন্য @Override ব্যবহার করে একটি খোলা ব্যাপার, যেহেতু কম্পাইলার আপনাকে অবিলম্বে যেকোন আনুমানিক পদ্ধতির বিষয়ে সতর্ক করবে। এই ক্ষেত্রে, একটি আর্গুমেন্ট তৈরি করা যেতে পারে যা এটি পঠনযোগ্যতা থেকে আটকাতে পারে - আপনার কোডটি পড়ার আরও বেশি কিছু এবং কিছুটা ডিগ্রি, এটি @Implement বলা হয় এবং @Implement নয়।





annotations