সংকলক জেভিএম রানটাইম সহজে প্রতিনিধিত্ব করতে পারে তার চেয়ে প্রকারের সম্পর্কে আরও তথ্য জানে। ম্যানিফেস্ট হ'ল টাইপ তথ্য যা হারিয়েছিল সে সম্পর্কে রানটাইমের সময় কোডটিতে একটি আন্ত-মাত্রিক বার্তা পাঠানোর সংকলকটির একটি উপায়।
এটি কীভাবে ক্লেপটোনীয়রা জীবাশ্ম রেকর্ডে এবং "জঞ্জাল" মানুষের ডিএনএ-তে এনকোড করা বার্তা ফেলেছে তার অনুরূপ। লাইটস্পিড এবং মহাকর্ষীয় অনুরণন ক্ষেত্রগুলির সীমাবদ্ধতার কারণে তারা সরাসরি যোগাযোগ করতে পারছে না। তবে, যদি আপনি তাদের সংকেতটি টিউন করতে জানেন তবে, মধ্যাহ্নভোজনে কী খাবেন বা কোন লোটোর সংখ্যাটি খেলবেন তা স্থির করে আপনি কীভাবে কল্পনা করতে পারবেন না সেগুলি থেকে উপকৃত হতে পারেন।
ম্যানিফেস্টটি আরও বিশদ না জেনে আপনি যে ত্রুটিগুলি দেখছেন তাতে উপকৃত হবে কিনা তা পরিষ্কার নয়।
ম্যানিফেস্টের একটি সাধারণ ব্যবহার হ'ল কোনও সংগ্রহের স্থিতিশীল ধরণের ভিত্তিতে আপনার কোডটি ভিন্নভাবে আচরণ করা। উদাহরণস্বরূপ, আপনি যদি একটি তালিকা [স্ট্রিং] অন্য তালিকার অন্যান্য ধরণের চেয়ে আলাদাভাবে আচরণ করতে চান তবে কী হবে:
def foo[T](x: List[T])(implicit m: Manifest[T]) = {
if (m <:< manifest[String])
println("Hey, this list is full of strings")
else
println("Non-stringy list")
}
foo(List("one", "two")) // Hey, this list is full of strings
foo(List(1, 2)) // Non-stringy list
foo(List("one", 2)) // Non-stringy list
এটির প্রতিবিম্ব-ভিত্তিক সমাধান সম্ভবত তালিকার প্রতিটি উপাদানকে পর্যবেক্ষণের সাথে জড়িত।
একটি প্রেক্ষাপটে আবদ্ধ Scala টাইপ-শ্রেণীর ব্যবহার সবচেয়ে উপযুক্ত বলে মনে হয়, এবং ভাল দেবাশিস ঘোষ এখানে ব্যাখ্যা করা হয়:
http://debasishg.blogspot.com/2010/06/scala-implicits-type-classes-here-i.html
প্রসঙ্গের সীমাগুলি কেবল পদ্ধতি স্বাক্ষরগুলিকে আরও পঠনযোগ্য করে তুলতে পারে। উদাহরণস্বরূপ, উপরের ফাংশনটি প্রসঙ্গের সীমানা ব্যবহার করে পুনরায় লিখিত হতে পারে:
def foo[T: Manifest](x: List[T]) = {
if (manifest[T] <:< manifest[String])
println("Hey, this list is full of strings")
else
println("Non-stringy list")
}