অ্যান্ড্রয়েড স্টুডিও - দ্বিপাক্ষিক পদ্ধতি কল getClass ()


130

আমি আমার অ্যান্ড্রয়েড অ্যাপ্লিকেশনটির জন্য অ্যান্ড্রয়েড স্টুডিও ব্যবহার করছি।
আমার কোড কাজ করে এবং সংকলন করে।
সম্প্রতি, IDE আমাকে নীচের কোডটির getClass এ ত্রুটি (লাল রেখাগুলি) দেখায়:

fragment.getClass().getSimpleName()

তবুও অ্যাপ্লিকেশনটি সংকলন করে চলে runs
ত্রুটিটি হ'ল:

Ambiguous method call. Both
getClass () in Object and
getClass () in Object match.

কেউ কি আমাকে ব্যাখ্যা করতে পারেন এটি সম্পর্কে কী? এবং কেন কোডটি এখনও চলছে?



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

উত্তর:


255

আমি মনে করি এটি অ্যান্ড্রয়েড স্টুডিওতে একটি বাগ। যেমনটি আমরা জানি, অ্যান্ড্রয়েড স্টুডিওটি ইন্টেলিজ প্ল্যাটফর্ম এবং ইন্টেলিজ আইডিইএ সম্প্রদায় সংস্করণের বিদ্যমান কার্যকারিতা ভিত্তিক।

গুগল এটি জেটব্রেইনসের সহযোগিতায় গড়ে তুলেছে। এবং একই বাগ ইন্টেলিজিতেও ঘটেছে বলে জানা গেছে। কটাক্ষপাত আছে ত্রুটি প্রতিবেদন

এই ইস্যুটির একমাত্র কার্যপ্রণালী হ'ল আপনি যে উদাহরণটি কল getClass()করেছেন তা Objectas

((Object) this).getClass()

20
এখনই কিছু যায় আসে না ... সুতরাং অনেক কিছু :)
স্যাম

1
@ রীতেশগুন নীচে আমার উত্তর দেখুন
জেমস ওয়াল্ড

11
আইডিইতে বাগের চারপাশে কাজ করার জন্য কোড পরিবর্তন করা কোনও সমাধানের খুব বেশি কিছু নয়।
জেফ্রি ব্লাটম্যান

2
এটি কাজ করে না, বা কমপক্ষে বর্তমানে নেই (অ্যান্ড্রয়েড স্টুডিও 0.8.9)
কনরাড

2
এক বছরেরও বেশি পরে এবং এটি এখনও ঠিক হয়নি :(
কাই

73

আপনার অ্যাপ্লিকেশন কোডটি পরিবর্তিত করার পরিবর্তে, আপনি আপনার অ্যান্ড্রয়েড এসডিকে উত্স কোড প্যাচ করে এই বাগটি এড়াতে পারবেন ।

আপনি যখন getClass () ত্রুটিটি দেখতে পাবেন তখন পদ্ধতির ঘোষণায় যান (ম্যাকের উপর ⌘B)। এটি যেমন কোনও পথে নেভিগেট করবে $ANDROID_HOME/sources/android-20/java/lang/Object.java। এখন, ইন্টেলিজিজ বা অ্যান্ড্রয়েড স্টুডিওতে:

  • Object.javaনির্বাচন করে লেখার যোগ্য করুন File -> Make File Writable। আপনি যদি ফাইলটি সম্পাদনা করার চেষ্টা করেন তবে আপনাকে এটি স্বয়ংক্রিয়ভাবে করতে অনুরোধ করা যেতে পারে।
  • আনবাউন্ডেড ওয়াইল্ডকার্ড সরান:

    // http://youtrack.jetbrains.com/issue/IDEA-72835 সর্বজনীন চূড়ান্ত নেটিভ ক্লাস getClass () এড়াতে আনবাউন্ডেড ওয়াইল্ডকার্ড (শ্রেণি) সরানো হয়েছে ;

অ্যান্ড্রয়েড স্টুডিওর নতুন সংস্করণগুলি একটি বাগের ফলে ভুগছে যা ফাইলটিকে লিখনযোগ্য হিসাবে ঘোষণা করার পরেও ফাইল সম্পাদনা করা থেকে বিরত রাখে। পরিবর্তে, পাথটি অনুলিপি করুন, Edit -> Copy Pathবা ⇧⌘ সি, এবং এটি আপনার প্রিয় সম্পাদনায় সম্পাদনা করুন।

এই পরিবর্তনটি উত্স নেভিগেশন কার্যকারিতা সংরক্ষণ করবে। অন্যান্য অপশন:

  • আপনি সম্পূর্ণ getClass()ঘোষণাটি মন্তব্য করতে পারেন ।
  • আপনি Object.javaফাইলের নামে জাভা-বিহীন এক্সটেনশন যুক্ত করতে পারেন , যেমন Object.java.in

জেমস ওয়াল্ড, সুন্দর উত্তর, + 1
রিতেশ গুন

2
আসলে আমি মনে করি এটি গ্রহণযোগ্য উত্তর হওয়া উচিত।
টমাস কেলার

1
অ্যান্ড্রয়েড স্টুডিওতে একটি বাগ রয়েছে যা Object.javaকেবলমাত্র পঠনযোগ্য পতাকা সাফ করার পরেও সম্পাদনা করার অনুমতি দেয় না তা এই প্রতিফলনের জন্য উত্তর আপডেট করে ।
জেমস ওয়াল্ড

2
এখানে হয় অ্যান্ড্রয়েড স্টুডিও বাগ রিপোর্ট করুন।
ফিল

শুধুমাত্র getClass পদ্ধতিতে মন্তব্য করার কারণে ইন্টেলিজ / স্টুডিও সম্পর্কে অভিযোগ করা হয় instance.getClass()(কেবলমাত্র getClass()কাজ করে)। Object.javaএটি অক্ষম করতে ফাইলটির পুনরায় নামকরণ কাজ করে।
পিয়েরে-লাক পাওর

9

আপনার "getClass" কোনও অবজেক্টে কাস্ট করুন, ব্যবহার করুন

((Object) this).getClass()

টুকরোগুলি নিয়ে এই সমস্যা রয়েছে তাদের জন্য, ব্যবহার করুন

((Object) fragment).getClass()

3
প্রকৃতপক্ষে, আপনি getClass () ফলাফলটি কাস্ট করেন না, আপনি অবজেক্ট হিসাবে গণ্য হওয়ার জন্য আপনি এখন অবধি যে বস্তুটিতে রয়েছেন (এটি) কাস্ট করেন।
হোর্হে আগুইলার

6
এটি সম্ভবত জাভা আইডিই দ্বারা প্রয়োজনীয় সবচেয়ে কুখ্যাত কাজের জন্য স্বর্ণপদক প্রাপ্য। জাভা অবজেক্ট টু অবজেক্টে কাস্টিং, চিত্তাকর্ষক শূন্যতা।
স্নিকোলাস

8

সম্পর্কিত অ্যান্ড্রয়েড স্টুডিও ইস্যুগুলির প্রথমটি এখানে । দয়া করে এটিকে তারকাচিহ্নিত করুন যাতে এটি কিছুটা মনোযোগ পেতে পারে!

এছাড়াও সম্পর্কিত ইন্টেলিজ ইস্যু এখানে

এই জন্য একটি ভাল কার্যসংক্রান্ত নামান্তর হয় <sdk>/android-<platform>/java/lang/Object.javaথেকে Object.java.XXXউদাহরণস্বরূপ। এটি এএসকে এটি দেখতে বাধা দেবে এবং বিষয়টি এড়ানো হবে। অবশ্যই এটি করার মাধ্যমে আপনি এএস এর মধ্যে থেকে আর সহজেই অবজেক্টের উত্সে নেভিগেট করতে পারবেন না।

এই বাগটি ঠিক হয়ে গেলে আপনি ফাইলটির মূল নামটি পুনরায় নামকরণ করতে পারবেন ...


2

যখন আমি একটি নতুন প্রকল্প তৈরি করেছি তখন আমিও একই সমস্যায় পড়েছিলাম। আমি অন্য প্রকল্পের সাথে তুলনা করেছি যা এই সমস্যাটি নয় এবং একটি পার্থক্য খুঁজে পেয়েছে। পুরানো প্রকল্পটি "অ্যান্ড্রয়েড ৪.২.২" এর বিপরীতে নির্মিত হয়েছিল যখন নতুনটি ডিফল্টরূপে "অ্যান্ড্রয়েড এপিআই 19 প্ল্যাটফর্ম" এ সেট করা হয়েছিল। আমি এটিকে "Android 4.2.2" তে পরিবর্তন করে যা এপিআই 17 এর সমান এবং লাল ত্রুটি চিহ্নিতকারী অদৃশ্য হয়ে যায়। এপিআই 17 আমার প্রকল্পের জন্য যথেষ্ট তাই আমি এটি এইভাবে ছেড়ে যেতে পারি। সত্যি বলতে কী, এটি কেন এই সমস্যাটি সমাধান করে।


1

আমি এটির জন্য একটি সমাধান পেয়েছি, অন্তত আমার শেষের দিকে। এটি অবশ্যই একটি ইন্টেলিজি বাগ, তবে এটি অ্যান্ড্রয়েড এসডিকে জন্য সোর্সপ্যাথ এবং ক্লাসপথে ক্লাসগুলির মধ্যে একটি দ্বন্দ্বের কারণ বলে মনে হচ্ছে।

আপনি যদি প্রজেক্ট স্ট্রাকচার> এসডিকে> {{আপনার অ্যান্ড্রয়েড এসডিকে} to এ যান তবে সোর্সপ্যাথ ট্যাব থেকে যে কোনও অ্যান্ড্রয়েড এন্ট্রি সরিয়ে ফেলুন। এই কর্মক্ষেত্রের সমস্যাটি হ'ল আপনার আর ইন্টেলিজ / অ্যান্ড্রয়েড স্টুডিওর মধ্য থেকে উত্সগুলিতে সরাসরি অ্যাক্সেস নেই।

আমি জেটব্রেইনস ইস্যু ট্র্যাকারে একই তথ্য পোস্ট করেছি , তাই আশা করি আমরা শীঘ্রই একটি সমাধান দেখতে পাব।


এখন একটি ঠিক আছে। এটি সম্ভবত v0.9.3 এ অন্তর্ভুক্ত করা হবে
পিএফএমগি

1

স্রেফ ফ্রেগমেন্ট.ক্লাস.জেটসিম্পলনেম () ব্যবহার করুন;

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