طرق مصنع لتطبيقات جافا واجهات ملفوفة مع implicits سكالا؟

StackOverflow https://stackoverflow.com/questions/514428

سؤال

وأنا باستخدام سكالا implicits لتحديد مجمع غني عن واجهة جافا:

class RichThing { def richStuff: Unit = {} }

في الكائن رفيق I تحديد التحويل الضمني وسيلة مصنع apply:

object RichThing { 
    implicit def rich( thing: JavaThing ) = new RichThing() 
    def apply() = new RichThing()
}

مع ذلك، يمكنني مثيل تطبيق جافا واجهة واستخدامه مثل RichThing (بسبب التحويل الضمني):

new JavaThingImpl().richStuff

ويمكنني أيضا إنشاء RichThing باستخدام طريقة مصنع (بسبب طريقة apply):

val a = RichThing()

ما أود القيام به هو مثيل تطبيقات جافا التعسفية واجهة في نفس الطريق. هذا لا يعمل، كما سكالا ثم يبحث عن وجوه مصاحب للتنفيذ ولا يمكن العثور على واحد:

val b = JavaThingImpl() // "not found: value JavaThingImpl"

ويمكنني أن إنشاء كائن رفيق سكالا لتنفيذ جافا:

object JavaThingImpl { def apply() = new RichThing() }

ولكن هل النقطة هو جعل هذا العمل لأي (في المجهول معين) تنفيذ واجهة.

هل هناك أي وسيلة لتحقيق ذلك؟ على سبيل المثال، لإنشاء سكالا الأجسام رفيق لتطبيقات جافا على الطاير، على أساس التحويل الضمني في كائن RichThing؟

وأو لإنشاء الكائن رفيق سكالا من الجانب جافا، ربما في فئة مجردة؟

هل كانت مفيدة؟

المحلول

لا، هذا غير ممكن في سكالا. ومن المحتمل أن يكون من الممكن إضافته إلى اللغة دون المساس نوع سلامة، ولكن السؤال الأول ما إذا كان تعقيد إضافي سيكون يستحق كل هذا العناء.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top