द्वारा कक्षा का साथी ऑब्जेक्ट प्राप्त करें जो मैं करने की कोशिश कर रहा हूं वह एक ऐसा कार्य करना है जो सामान्य वर्ग ले ले और इसमें एक स्थिर विधि का उपयोग करे (जावा भाषा के लिए खेद है, मेरा मतलब है कि इसके साथी ऑब्जेक्ट का तरीका)।सामान्य जेनेरिक प्रकार स्काला
trait Worker {def doSth: Unit}
class Base
object Base extends Worker
// this actually wouldn't work, just to show what I'm trying to achieve
def callSthStatic[T that companion object is <: Worker](implicit m: Manifest[T]) {
// here I want to call T.doSth (on T object)
m.getMagicallyCompanionObject.doSth
}
कोई विचार? यदि स्काला 2.9.x. का उपयोग कर
trait Companion[T] {
type C
def apply() : C
}
object Companion {
implicit def companion[T](implicit comp : Companion[T]) = comp()
}
object TestCompanion {
trait Foo
object Foo {
def bar = "wibble"
// Per-companion boilerplate for access via implicit resolution
implicit def companion = new Companion[Foo] {
type C = Foo.type
def apply() = Foo
}
}
import Companion._
val fc = companion[Foo] // Type is Foo.type
val s = fc.bar // bar is accessible
}
यह -Ydependent-method-types
ध्वज के साथ संकलित किया जाना चाहिए:
मैंने वास्तविक जिस्ट सामग्री को जोड़ा - गस्ट गायब हो सकता है और अकेले लिंक एक टिप्पणी के रूप में योग्यता प्राप्त करता है। –
मुझे "त्रुटि मिल रही है: अवैध आश्रित विधि प्रकार निहित डीफ़ साथी [टी] (अंतर्निहित COMP: सहयोगी [टी]) = comp.apply()" लाइन पर "निहित डीफ़ साथी [टी] (अंतर्निहित COMP: सहयोगी [ टी]) = comp() "स्कैला 2.9.1 के साथ। क्या मैं इसे गलत कर रहा हूँ? :-) –
मैं मूल रूप से जोड़ दूंगा कि यदि 'फू' प्रकार दिखाई देता है तो यह साथी वस्तु है, इसलिए यह काफी निफ्टी दिखता है, मुझे नहीं लगता कि यह अभ्यास में उपयोगी है। –