জাভা 8 এমন একটি পদ্ধতির জন্য কী যা কিছুই নেয় না এবং কিছুই ফিরিয়ে দেয় না তার জন্য কার্যকারী ইন্টারফেস কী?
অর্থাৎ, রিটার্ন টাইপের Actionসাথে সি # প্যারামিটারলেসের সমান void?
জাভা 8 এমন একটি পদ্ধতির জন্য কী যা কিছুই নেয় না এবং কিছুই ফিরিয়ে দেয় না তার জন্য কার্যকারী ইন্টারফেস কী?
অর্থাৎ, রিটার্ন টাইপের Actionসাথে সি # প্যারামিটারলেসের সমান void?
উত্তর:
যদি আমি সঠিকভাবে বুঝতে পারি তবে আপনি কোনও পদ্ধতির সাথে একটি কার্যকরী ইন্টারফেস চান void m()। কোন ক্ষেত্রে আপনি কেবল একটি ব্যবহার করতে পারেন Runnable।
Runnableদ্বারা টীকাযুক্ত করা হয়েছে @FunctionalInterfaceএবং (ii) এমনকি একটি ল্যাম্বডা অভিব্যক্তির প্রসঙ্গে এটি একটি থ্রেডে কার্যকর করা হবে: যে থ্রেডে ল্যাম্বডা চালিত হয় যা বর্তমান থ্রেড হতে পারে ...
Runnableছিলেন তার মন্তব্যে, ব্রায়ান গোয়েট নিশ্চিত করেছেন যে এই উদ্দেশ্যটি কেবল থ্রেডিং প্রসঙ্গে নয়, এই উদ্দেশ্যে ব্যবহার করা হয়েছিল।
শুধু নিজের তৈরি করুন
@FunctionalInterface
public interface Procedure {
void run();
default Procedure andThen(Procedure after){
return () -> {
this.run();
after.run();
};
}
default Procedure compose(Procedure before){
return () -> {
before.run();
this.run();
};
}
}
এবং এটি এটি ব্যবহার করুন
public static void main(String[] args){
Procedure procedure1 = () -> System.out.print("Hello");
Procedure procedure2 = () -> System.out.print("World");
procedure1.andThen(procedure2).run();
System.out.println();
procedure1.compose(procedure2).run();
}
এবং আউটপুট
HelloWorld
WorldHello
@ ফাংশনাল ইনটারফেস কেবলমাত্র পদ্ধতি বিমূর্ত পদ্ধতিকে মঞ্জুরি দেয় তাই আপনি নীচে হিসাবে ল্যাম্বডা এক্সপ্রেশন দিয়ে সেই ইন্টারফেসটি ইনস্ট্যান্ট করতে পারেন এবং আপনি ইন্টারফেসের সদস্যদের অ্যাক্সেস করতে পারবেন
@FunctionalInterface
interface Hai {
void m2();
static void m1() {
System.out.println("i m1 method:::");
}
default void log(String str) {
System.out.println("i am log method:::" + str);
}
}
public class Hello {
public static void main(String[] args) {
Hai hai = () -> {};
hai.log("lets do it.");
Hai.m1();
}
}
output:
i am log method:::lets do it.
i m1 method:::
Runnableএর ইন্টারফেসের স্পেসিফিকেশন নির্দেশ করে এটিThreadক্লাসে এক্সিকিউটেবল কোড সরবরাহ করা ।Runnableথ্রেড দ্বারা মৃত্যুদন্ড কার্যকর করার উদ্দেশ্যে নয় এমন জায়গাটি ব্যবহার করা আমার পক্ষে ঠিক হবে না; বিভ্রান্তিকর বলে মনে হচ্ছে এটি একটি কার্যকরী ইন্টারফেসের স্পেসিফিকেশন পূরণ করে এবং ল্যাম্বদা সিনট্যাক্স ব্যবহার করে তৈরি করা যেতে পারেRunnableবলে সংজ্ঞায়িত করা হয়FunctionalInterface। আপনার নিজস্ব ক্রিয়ামূলক ইন্টারফেস কেন তৈরি করবেন না? দেখতে runnable দেখুন FunctionalInterface