নিম্নলিখিত দুটি ক্লাস এবং ইন্টারফেস বিবেচনা করুন:
public class Class1 {}
public class Class2 {}
public interface Interface1 {}
দ্বিতীয় কল কেন mandatory
ওভারলোডেড পদ্ধতিটির সাথে অনুরোধ জানায় Class2
, যদি getInterface1
এবং এর Interface1
সাথে কোনও সম্পর্ক না থাকে Class2
?
public class Test {
public static void main(String[] args) {
Class1 class1 = getClass1();
Interface1 interface1 = getInterface1();
mandatory(getClass1()); // prints "T is not class2"
mandatory(getInterface1()); // prints "T is class2"
mandatory(class1); // prints "T is not class2"
mandatory(interface1); // prints "T is not class2"
}
public static <T> void mandatory(T o) {
System.out.println("T is not class2");
}
public static <T extends Class2> void mandatory(T o) {
System.out.println("T is class2");
}
public static <T extends Class1> T getClass1() {
return null;
}
public static <T extends Interface1> T getInterface1() {
return null;
}
}
আমি বুঝতে পারি যে জাভা 8 জাভা 7 এর সাথে সামঞ্জস্যতা ভঙ্গ করেছে :
$ /usr/lib/jvm/java-8-openjdk-amd64/bin/javac -source 1.7 -target 1.7 *java; /usr/lib/jvm/java-8-openjdk-amd64/bin/java Test
warning: [options] bootstrap class path not set in conjunction with -source 1.7
1 warning
T is not class2
T is not class2
T is not class2
T is not class2
এবং জাভা 8 দিয়ে (11 এবং 13 দিয়ে পরীক্ষাও করা হয়েছে):
$ /usr/lib/jvm/java-8-openjdk-amd64/bin/javac *java; /usr/lib/jvm/java-8-openjdk-amd64/bin/java Test
T is not class2
T is class2
T is not class2
T is not class2