যেকোন, যেকোনও, আরিআরএফ, অবজেক্টের মধ্যে কী সম্পর্ক রয়েছে এবং জাভা কোড ব্যবহার করার সময় তারা কীভাবে মানচিত্র করে?


111

এটি সংকলন না হওয়া পর্যন্ত আমি সাধারণত প্রতিটি সংমিশ্রণের চেষ্টা করেই শেষ করি। আমার কী ব্যবহার করা উচিত তা কি কেউ ব্যাখ্যা করতে পারেন?

উত্তর:


125

আমি ক্রিসের জবাব এক সাথে মানতে পারব না । ক্লাস Any, AnyRefএবং AnyVal হয় ক্লাস। জেভিএমের অভ্যন্তরীণ সীমাবদ্ধতার কারণে তারা বাইটোকোডে ক্লাস হিসাবে উপস্থিত হয় না।

এটি জাভাতে থাকা সমস্ত কিছুই একটি বস্তু নয় এমনটি থেকে উদ্ভূত হয়। বস্তুগুলি ছাড়াও আদিম রয়েছে। জাভাতে সমস্ত অবজেক্টস বংশোদ্ভূত java.lang.Object, তবে আদিমগুলি পৃথক করে রাখা হয় এবং বর্তমানে * কোনও প্রোগ্রামার দ্বারা এক্সটেনসিবল নয়। এও লক্ষ করুন যে আদিমদের "অপারেটর" রয়েছে, পদ্ধতি নেই।

অন্যদিকে স্কালায়, সমস্ত কিছুই একটি বস্তু, সমস্ত বস্তু একটি শ্রেণীর অন্তর্গত, এবং তারা পদ্ধতির মাধ্যমে যোগাযোগ করে। উত্পন্ন জেভিএম বাইটকোড এটিকে প্রতিফলিত করে না, তবে জাভা যেমন জেনেরিকস রয়েছে, তবুও বাইটকোড না থাকলেও এটি তাদের কম দেয় না।

সুতরাং, স্কালায়, সমস্ত অবজেক্টগুলি বংশোদ্ভূত Any, এবং এর মধ্যে জাভা কী জিনিসকে বিবেচনা করে এবং যা জাভা আদিম বিবেচনা করে তা উভয়ই অন্তর্ভুক্ত। জাভাতে কোনও সমতুল্য নেই কারণ এ জাতীয় কোনও একীকরণ নেই।

জাভাতে আদিম হিসাবে বিবেচিত সমস্ত কিছুই AnyValস্কালার বংশধর । স্কেল ২.১০.০ পর্যন্ত AnyValসিল ছিল এবং প্রোগ্রামাররা এটি প্রসারিত করতে অক্ষম ছিল। স্কালার সাথে কী হবে তা দেখার জন্য আকর্ষণীয় হওয়া উচিত et নেট, যেহেতু আন্তঃব্যবহারযোগ্যতা একাই স্কালাকে কমপক্ষে ব্যবহারকারী-সংজ্ঞায়িত "আদিম" স্বীকৃতি দেয়।

এছাড়াও প্রসারিত Anyহয় AnyRef, যা java.lang.Object(যে কোনও হারে জেভিএমের) সমতুল্য ।

স্কেল ২.৯.x অবধি, কোনও ব্যবহারকারী জাভা থেকে তাদের প্রসারিত করতে Anyবা AnyValতাদের রেফারেন্স করতে পারেনি, তবে স্কালায় এগুলি প্রয়োগ করতে পারে এমন অন্যান্য ব্যবহার রয়েছে। বিশেষত, স্বাক্ষরগুলি টাইপ করুন:

def f(x: AnyVal) = println(x)
def g(x: AnyRef) = println(x)
def h(x: Any) = println(x)

প্রতিটি অর্থ কী বর্গ স্তরক্রম থেকে সুস্পষ্ট হওয়া উচিত। উল্লেখ্য, এটি হ'ল fএবং hএটি অটো-বাক্স gহবে , তবে তা করবে না। এটা একটা কি জাভা করে, যে বিপরীত বিট fএবং hনির্দিষ্ট করা যাবে না, এবং g(দ্বারা সংজ্ঞায়িত java.lang.Object) স্বতঃ-বক্সিং কারণ হবে।

স্কেলা ২.১০.০ দিয়ে শুরু করে, যদিও ব্যবহারকারী নিম্নোক্ত শব্দার্থবিজ্ঞানের সাহায্যে প্রসারিত করতে পারেন AnyValবা Any:

  • যদি কোনও শ্রেণি প্রসারিত AnyValহয় তবে নির্দিষ্ট শর্তে এটির স্তূপে কোনও উদাহরণ তৈরি করা হবে না। এর অর্থ এই শ্রেণীর ক্ষেত্রগুলি (২.১০.০ তে কেবলমাত্র একটি একক ক্ষেত্রের অনুমতি রয়েছে - যা পরিবর্তিত হবে কিনা তা দেখতে পাওয়া যায়) স্ট্যাকের উপর থেকে থাকবে, সেগুলি আদিম বা অন্যান্য বস্তুর রেফারেন্স কিনা। এটি ইনস্ট্যান্টেশন ব্যয় ছাড়াই এক্সটেনশন পদ্ধতিগুলিকে মঞ্জুরি দেয়।

  • যদি কোনও বৈশিষ্ট্য প্রসারিত হয় Any, তবে এটি উভয় শ্রেণীর সাথে ব্যবহার করা যেতে পারে যা প্রসারিত AnyRefএবং ক্লাসগুলি প্রসারিত হয় AnyVal

পিএস: আমার নিজের দৃষ্টিতে, জাভা সম্ভবত "স্ট্রাক্ট" আদিমদের অনুমতি দেওয়ার ক্ষেত্রে সি # অনুসরণ করবে এবং সম্ভবত টাইফিডেফস, কারণ তাদের প্রতিশ্রুতি না দিয়ে সমান্তরালতা ভাল পারফরম্যান্সের সাথে সম্পাদন করা কঠিন প্রমাণ করছে।


2
একটি আপডেট: স্কেল ২.৯.২ AnyValহিসাবে হিসাবে সংজ্ঞায়িত করা হয়েছে sealed trait AnyVal extends Any। কিন্তু Scala 2.10 এ এই পরিবর্তিত হয়েছে abstract class AnyVal extends Any with NotNull, এবং এটি এখন প্রসারিত করা সম্ভব AnyValনতুন মান শ্রেণীর বৈশিষ্ট্য, যেমন সঙ্গে class MyValue(val u: Int) extends AnyVal
এব্রুচেজ

@ ইবারুচেজ নোটের জন্য ধন্যবাদ। আমি আমার উত্তরটি নতুন দক্ষতার ওভারভিউ দিয়ে আপডেট করেছি।
ড্যানিয়েল সি সোব্রাল 23

কীভাবে কিছুই এবং নুল এর সাথে সম্পর্কিত নয়?
গৌরব खरे


5

Anyএবং AnyVal, আমি বিশ্বাস করি, Scala অংশ টাইপ সিস্টেম এবং যেমন শ্রেণীর নয় (একই ভাবে যে Nothingএক ধরনের, না একটি ক্লাস হয়)। আপনি এগুলিকে জাভা কোডের মধ্যে থেকে স্পষ্টভাবে ব্যবহার করতে পারবেন না।

Howwever, জাভা / Scala আন্তঃক্রিয়াকলাপের, একটি পদ্ধতি যা গ্রহণ করে একটি জাভা Objecta Scala আশা করবে Any/ AnyRef

আপনি আসলে কী করার চেষ্টা করছেন?


আমি এই বিষয়টিকে আরও ভাল করে বোঝার চেষ্টা করছি যাতে আমি যখন জাভা কল স্কালার বা তার বিপরীতে কল করার পরিকল্পনা করি তখন আমার কী ধরণের ব্যবহার করা উচিত তা আমি জানতে পারি। এই উত্তর stackoverflow.com/questions/2334200/… এবং এর কাস্ট AnyRefআমাকে কেবল মনে করিয়ে দেওয়ার জন্য যে এটি এখনও আমার কাছে রহস্যজনক ছিল।
huynhjl
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.