জাভা মধ্যে সমবায় রিটার্ন টাইপ কি? সাধারণভাবে অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিংয়ে?
জাভা মধ্যে সমবায় রিটার্ন টাইপ কি? সাধারণভাবে অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিংয়ে?
উত্তর:
কোভেরিয়েন্ট রিটার্ন, এর অর্থ হ'ল যখন কেউ কোনও পদ্ধতিকে ওভাররাইড করে, তখন ওভাররাইডিং পদ্ধতির রিটার্ন টাইপকে ওভাররাইড পদ্ধতির রিটার্ন টাইপের একটি সাব টাইপ হিসাবে মঞ্জুরি দেওয়া হয়।
একটি উদাহরণ সহ এটি স্পষ্ট করার জন্য, একটি সাধারণ কেস হ'ল Object.clone()
- যা এক ধরণের ফেরত দেওয়ার ঘোষণা করা হয় Object
। আপনি নিম্নলিখিতটি নিজের ক্লাসে ওভাররাইড করতে পারেন:
public class MyFoo
{
...
// Note covariant return here, method does not just return Object
public MyFoo clone()
{
// Implementation
}
}
এখানে সুবিধাটি হ'ল যে কোনও পদ্ধতি যা কোনও মাইফু অবজেক্টের স্পষ্ট উল্লেখ রয়েছে clone()
, তা প্রত্যাবর্তন মানটি উদাহরণ হিসাবে জানতে (কাস্টিং ছাড়াই) প্রার্থনা করতে এবং জানতে সক্ষম হবে MyFoo
। কোভেরিয়েন্ট রিটার্নের ধরণ ছাড়াই মাইফুতে ওভাররাইড হওয়া পদ্ধতিটি ফিরে আসতে ঘোষণা করতে হবে Object
- এবং সুতরাং কলিং কোডটি পদ্ধতি কলের ফলাফলকে স্পষ্টভাবে হ্রাস করতে হবে (এমনকি উভয় পক্ষই "জানেন" এটি কেবল মাইফুর উদাহরণ হতে পারে) )।
দ্রষ্টব্য যে এখানে কোনও বিশেষ কিছুই নেই clone()
এবং যে কোনও ওভাররাইড পদ্ধতিতে কোভেরিয়েন্ট রিটার্ন আসতে পারে - আমি এটি উদাহরণ হিসাবে এখানে ব্যবহার করি এটি এটি একটি আদর্শ পদ্ধতি যেখানে এটি প্রায়শই কার্যকর।
List<Foo>
এবং List<FooBar>
?
clone()
একজন হিসাবে শীর্ষ স্তরের সংজ্ঞাটি ভাবতে পারেন Method<Void, Object>
এবং আরও নির্দিষ্টভাবে Method<Void, MyFoo>
সেই পিতামাতার প্রকারের জন্য নির্দিষ্টযোগ্য কিনা তা জিজ্ঞাসা করতে পারেন। এটি যা, যদি এবং শুধুমাত্র জাভা পদ্ধতিগুলি তাদের ফেরতের প্রকারে সমবায় থাকে।
এখানে আরও একটি সহজ উদাহরণ:
Animal
শ্রেণী
public class Animal {
protected Food seekFood() {
return new Food();
}
}
Dog
শ্রেণী
public class Dog extends Animal {
@Override
protected Food seekFood() {
return new DogFood();
}
}
নীচের মতো দেখানো হয়েছে - এর একটি উপক্লাস - Dog
এর seekFood()
পদ্ধতিটির রিটার্নের ধরণটি সংশোধন করা সম্ভব :DogFood
Food
@Override
protected DogFood seekFood() {
return new DogFood();
}
এটি পুরোপুরি আইনী ওভাররাইডিং এবং Dog
এর seekFood()
পদ্ধতির রিটার্নের ধরণটি কোভেরিয়েন্ট রিটার্ন টাইপ হিসাবে পরিচিত ।
জেডিকে ২.০ প্রকাশের পর থেকে জাভাতে কোভেরিয়েন্ট প্রকার চালু হয়েছিল। এবং আমি এটি একটি সাধারণ ক্ষেত্রে আপনাকে ব্যাখ্যা করব,: আমরা যখন কোনও ফাংশন ওভাররাইড করি তখন ফাংশনটিকে তার আচরণে পরিবর্তন করার অনুমতি দেওয়া হয় যা আপনি বেশিরভাগ বইয়ে পড়তে পারেন, তবে তারা কী লেখক} মিস করে on আমরা যে রিটার্নের প্রকারটিও পরিবর্তন করতে পারি। স্পষ্টতার জন্য নীচের লিঙ্কটি পরীক্ষা করুন আমরা যতক্ষণ না পদ্ধতির বেস সংস্করণটি ফেরত দেওয়ার জন্য নির্ধারিত হতে পারি ততক্ষণ রিটার্নের ধরণটি পরিবর্তন করতে পারি।
সুতরাং উদ্ভূত প্রকারের ফিরে আসার এই বৈশিষ্ট্যটিকে COVARIANT বলা হয় ...
ওভাররাইড পদ্ধতিগুলি কি রিটার্নের ধরণের মধ্যে আলাদা হতে পারে?
কোভেরিয়েন্ট রিটার্নের ধরণগুলির অর্থ কেবল নিজের শ্রেণীর রেফারেন্স বা তার শিশু শ্রেণির রেফারেন্স ফিরিয়ে দেওয়া।
class Parent {
//it contain data member and data method
}
class Child extends Parent {
//it contain data member and data method
//covariant return
public Parent methodName() {
return new Parent();
or
return Child();
}
}
Parent.foo()
আয় একটি সম্পর্কহীন টাইপ A
এবং Child.foo()
রিটার্ন একটি টাইপ B
থেকে উদ্ভূত A
।
উপরের উত্তরগুলি যুক্ত করতে, ওভাররাইড পদ্ধতি (সাবক্লাস পদ্ধতি) রিটার্ন টাইপ ওভাররাইড পদ্ধতি (সুপারক্লাস পদ্ধতি) এর রিটার্ন টাইপের একটি সাবক্লাস হওয়া উচিত এই সীমাবদ্ধতার সাথে সহ-বৈকল্পিক রিটার্ন টাইপের মধ্যে ওভাররাইডিং সম্ভব। এটি জাভা 5 এর পরে বৈধ।
কোভেরিয়েন্ট রিটার্ন টাইপ উল্লেখ করে যে রিটার্নের ধরণটি সাবক্লাসের মতো একই দিকে পরিবর্তিত হতে পারে
class One{
One get(){return this;}
}
class Two extends One{
Two get(){return this;}
void message(){
System.out.println("After Java5 welcome to covariant return type");
}
public static void main(String args[]){
new Two().get().message();
}
}
জাভা 5 এর আগে, রিটার্নের ধরণ পরিবর্তন করে কোনও পদ্ধতি ওভাররাইড করা সম্ভব ছিল না। তবে এখন, জাভা 5 থেকে,
সাবক্লাস যদি এমন কোনও পদ্ধতি ওভাররাইড করে যার রিটার্ন টাইপটি নন-প্রিমিটিভ হয় তবে এটি তার রিটার্নের ধরণটি সাবক্লাসের ধরণে পরিবর্তন করে যদি রিটার্নের ধরণের পরিবর্তন করে পদ্ধতিটিকে ওভাররাইড করা সম্ভব হয়।
ওভাররাইডিং
পদ্ধতিগুলি যখন আমরা আরও সুনির্দিষ্ট রিটার্ন টাইপ আছে একটি স্বাধীনতা পেতে ।
রিটার্নগুলিতে রান-টাইম ক্লাসকাস্ট এক্সেক্সশন প্রতিরোধে সহায়তা করুন
তথ্যসূত্র: www.geeksforgeeks.org
- জাভাতে কোভেরিয়েন্ট রিটার্ন টাইপ, ওভাররাইড পদ্ধতিতে রিটার্ন টাইপকে সংকীর্ণ করতে দেয়।
- এই বৈশিষ্ট্যটি ক্লায়েন্টের পক্ষে কাস্টিং এড়াতে সহায়তা করবে। এটি প্রোগ্রামারকে টাইপ চেকিং এবং ডাউন কাস্টিংয়ের প্রয়োজন ছাড়াই প্রোগ্রাম করার অনুমতি দেয়।
- কোভেরিয়েন্ট রিটার্ন টাইপ সর্বদা কেবল অ-আদিম রিটার্ন টাইপের জন্য কাজ করে।
interface Interviewer {
default Object submitInterviewStatus() {
System.out.println("Interviewer:Accept");
return "Interviewer:Accept";
}
}
class Manager implements Interviewer {
@Override
public String submitInterviewStatus() {
System.out.println("Manager:Accept");
return "Manager:Accept";
}
}
class Project {
public static void main(String args[]) {
Interviewer interviewer = new Manager();
interviewer.submitInterviewStatus();
Manager mgr = new Manager();
mgr.submitInterviewStatus();
}
}
অন্যান্য উদাহরণ জাভা থেকে,
UnaryOperator.java
@FunctionalInterface
public interface UnaryOperator<T> extends Function<T, T> {
/**
* Returns a unary operator that always returns its input argument.
*
* @param <T> the type of the input and output of the operator
* @return a unary operator that always returns its input argument
*/
static <T> UnaryOperator<T> identity() {
return t -> t;
}
}
Function.java
@FunctionalInterface
public interface Function<T, R> {
........
........
........
........
static <T> Function<T, T> identity() {
return t -> t;
}
}
জাভা 5 এর আগে, রিটার্নের ধরণ পরিবর্তন করে কোনও পদ্ধতি ওভাররাইড করা সম্ভব ছিল না। তবে এখন জাভা ৫-এর পরে, সাবক্লাস যদি এমন কোনও পদ্ধতিকে ওভাররাইড করে যার রিটার্ন টাইপটি নন-প্রিমিটিভ হয় তবে এটি তার রিটার্নের ধরনটি সাবক্লাসের ধরণে পরিবর্তিত করে।