ජාවා, 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 ABසහ අතර ධූරාවලියක් තිබිය 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. පිං.
හරි, Bgenerics ටයිප් කර 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: VoteToClose ට ස්තූතිවන්ත වෙමින් විචල්ය ප්රකාශය පන්ති සාමාජිකයෙකු වෙත ගෙන යන ලදී .