কীভাবে কোটলিনে বেনামে ইন্টারফেসের উদাহরণ তৈরি করবেন?


95

আমার একটি তৃতীয় পক্ষের জাভা গ্রন্থাগার রয়েছে যা এই জাতীয় ইন্টারফেস সহ একটি অবজেক্ট:

public interface Handler<C> {
  void call(C context) throws Exception;
}

জাভা বেনাম শ্রেণীর মতো কোটলিনে আমি কীভাবে সংক্ষেপে এটি প্রয়োগ করতে পারি:

Handler<MyContext> handler = new Handler<MyContext> {
   @Override
   public void call(MyContext context) throws Exception {
      System.out.println("Hello world");
   }
}

handler.call(myContext) // Prints "Hello world"

উত্তর:


143

ধরে নিই ইন্টারফেসের কেবল একটি একক পদ্ধতি রয়েছে আপনি এসএএম ব্যবহার করতে পারবেন

val handler = Handler<String> { println("Hello: $it") }

যদি আপনার এমন কোনও পদ্ধতি থাকে যা কোনও হ্যান্ডলার গ্রহণ করে তবে আপনি এমনকি প্রকারের আর্গুমেন্টগুলি বাদ দিতে পারেন:

fun acceptHandler(handler:Handler<String>){}

acceptHandler(Handler { println("Hello: $it") })

acceptHandler({ println("Hello: $it") })

acceptHandler { println("Hello: $it") }

যদি ইন্টারফেসের একাধিক পদ্ধতি থাকে তবে সিনট্যাক্সটি আরও বেশি ভার্বোস হয়:

val handler = object: Handler2<String> {
    override fun call(context: String?) { println("Call: $context") }
    override fun run(context: String?) { println("Run: $context")  }
}

4
acceptHandler { println("Hello: $it")}বেশিরভাগ ক্ষেত্রেও কাজ করবে
ভদদান

4
যে কারও পক্ষে লড়াই চলছে। আমি মনে করি জাভাতে ইন্টারফেসটি অবশ্যই ঘোষণা করতে হবে। আমি মনে করি এসএএম রূপান্তর কোটলিন ইন্টারফেসের জন্য কাজ করছে না। যদি এটি কোনও কোটলিন ইন্টারফেস হয় তবে আপনাকে অবজেক্টটি ব্যবহার করতে হবে: হ্যান্ডলার}} উপায়। এখানে প্রতি: youtrack.jetbrains.com/issue/KT-7770
j2emanue

4
আপনি কোটলিন ইন্টারফেসের সাথে এটি 1.4 হিসাবে করতে পারেন - আপনি কেবল এটি হিসাবে ঘোষণা করেন fun interface
নিক

18

আমার একটি কেস হয়েছে যেখানে আমি এটির জন্য কোনও ভার তৈরি করতে চাইনি তবে এটি ইনলাইনটি করতে চাই। আমি যেভাবে এটি অর্জন করেছি

funA(object: InterfaceListener {
                        override fun OnMethod1() {}

                        override fun OnMethod2() {}
})


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