জাভা, 102 95 89 88 78 বাইট
class A<T>{}class B<T>extends A<A<?super B<B<T>>>>{A<?super B<A>>a=new B<>();}
এটি StackOverflowError
ঘটতে থাকে এমনটি দিয়ে শেষ হয় কারণ জেনেরিক রেজোলিউশন সিস্টেমটি অন্য জেনেরিকগুলি সমাধান করার জন্য কোনও মূল সিদ্ধান্ত নিতে পারে না।
ক্রেডিট যেখানে প্রাপ্য ।
এখানে কি হয়?
A<T>
একটি 1-অক্ষরের পিতা বা মাতা আছে ঠিক আছে। এটা জেনেরিক আমি ব্যবহার করতে পারতাম List
, তবে 4 টি বর্ণের আমদানি এবং পুনরাবৃত্তি খুব দীর্ঘ।
B<T>
একটি বেসিক জেনেরিক ঘোষণা।
B extends A
এর মধ্যে B
এবং এর মধ্যে একটি শ্রেণিবিন্যাস থাকা দরকার A
।
extends A<A>
স্ব স্ব রেফারেন্স তৈরি করে A<T>
।
A<? super B>
জেনারিকগুলির জন্য অনুসন্ধানটি চালু করে A<T>
B<B<T>>
একটি স্ব-রেফারেন্স তৈরি করে B<T>
।
A<...> a=new B<>()
জেনেরিকের ব্যবহারকে জোর করে, কেবল তাদের সংজ্ঞা পরিবর্তনের পরিবর্তে, সংকলনের সময় রেজোলিউশনকে বাধ্য করা B
, এবং তারপরে নয়।
A<?super B
একটি স্ব-স্ব-রেফারেন্স তৈরি করে, তাই আমাদের জেনেরিকের ক্ষেত্রে একটি প্রকারের এবং অন্যটির কাছে দুটিই রেফারেন্স রয়েছে A
।
B<A>
একটি স্ব-স্ব-রেফারেন্স তৈরি করে, তাই আমাদের জেনেরিকের ক্ষেত্রে একটি প্রকারের এবং অন্যটির কাছে দুটিই রেফারেন্স রয়েছে B
।
এখন, A
টাইপটির জেনেরিক টাইপ রয়েছে A
এবং B
তবে কোনটি বেছে নেওয়া উচিত? নিজের সম্পর্কে ভুলে যাও, সমাধান করার চেষ্টা করা যাক B
। পিং।
ঠিক আছে, B
জেনেরিকস টাইপ আছে A
এবং B
, তবে কোনটি বেছে নেওয়া উচিত? নিজের সম্পর্কে ভুলে যাও, সমাধান করার চেষ্টা করা যাক A
। পং।
পুনরাবৃত্তির এই ধরনের সত্যিই মত বৈধ মামলা আছে কারণ এড়ানো যায় না A<B<A<B<A<B<Object>>>>>>
উদাহরণস্বরূপ একটি JSON বস্তু: List<Map<String,Map<String,List<Map<String,List<String>>>>>>
।
সংকলন ফলাফল
$ javac NoCompile.java
The system is out of resources.
Consult the following stack trace for details.
java.lang.StackOverflowError
at com.sun.tools.javac.code.Types$UnaryVisitor.visit(Types.java:3260)
at com.sun.tools.javac.code.Types$23.visitClassType(Types.java:2587)
at com.sun.tools.javac.code.Types$23.visitClassType(Types.java:2579)
at com.sun.tools.javac.code.Type$ClassType.accept(Type.java:554)
at com.sun.tools.javac.code.Types$UnaryVisitor.visit(Types.java:3260)
at com.sun.tools.javac.code.Types$23.visitClassType(Types.java:2592)
at com.sun.tools.javac.code.Types$23.visitClassType(Types.java:2579)
at com.sun.tools.javac.code.Type$ClassType.accept(Type.java:554)
আমার সিস্টেমে স্ট্যাক ট্রেস 1024 লাইন দেখানোর পরে বন্ধ হয়ে যায় যা আসলে 4 টি একই লাইন 256 বার পুনরাবৃত্তি হয়েছিল, সুতরাং এটি অসীম পুনরাবৃত্তি প্রমাণ করে। আমি আপনাকে পুরো ট্রেস ছাড়ব।
জমা
- 102 → 95 বাইট:
interface
+ এর implements
সাথে class
+ প্রতিস্থাপন করা হয়েছে extends
।
- 95 → 89 বাইট: প্রতিস্থাপিত
Long
সঙ্গে A
(দু'বার)।
- 89 → 88 বাইট: ব্যবহৃত ডায়মন্ড অপারেটর (
new B<A>()
→ new B<>()
)।
- 88 → 78 বাইট: ভেটোক্লোজ ধন্যবাদ, একটি শ্রেণীর সদস্যের জন্য পরিবর্তনশীল ঘোষণা সরানো ।