জেনেরিক ধরণের পরামিতিগুলি অনুমান করার জন্য জাভার নিয়ম নেভিগেট করতে আমার কিছুটা সমস্যা হচ্ছে। নিম্নলিখিত ক্লাসটি বিবেচনা করুন, যার একটি listচ্ছিক তালিকার প্যারামিটার রয়েছে:
import java.util.Collections;
import java.util.List;
public class Person {
private String name;
private List<String> nicknames;
public Person(String name) {
this(name,Collections.emptyList());
}
public Person(String name,List<String> nicknames) {
this.name = name;
this.nicknames = nicknames;
}
}
আমার জাভা সংকলক নিম্নলিখিত ত্রুটি দেয়:
Person.java:9: The constructor Person(String, List<Object>) is undefined
কিন্তু Collections.emptyList()
রিটার্ন টাইপ <T> List<T>
, না List<Object>
। একটি কাস্ট যোগ করা কোনও উপকারে আসে না
public Person(String name) {
this(name,(List<String>)Collections.emptyList());
}
উৎপাদনের
Person.java:9: inconvertible types
এর EMPTY_LIST
পরিবর্তে ব্যবহার করা হচ্ছেemptyList()
public Person(String name) {
this(name,Collections.EMPTY_LIST);
}
উৎপাদনের
Person.java:9: warning: [unchecked] unchecked conversion
যেখানে নিম্নলিখিত পরিবর্তন ত্রুটিটি দূরে সরিয়ে দেয়:
public Person(String name) {
this.name = name;
this.nicknames = Collections.emptyList();
}
আমি এখানে কোন ধরণের-চেকিংয়ের বিরুদ্ধে লড়াই করছি এবং এর চারপাশে কাজ করার সর্বোত্তম উপায়টি কি কেউ ব্যাখ্যা করতে পারবেন? এই উদাহরণে, চূড়ান্ত কোড উদাহরণ সন্তোষজনক, তবে বৃহত্তর ক্লাসগুলির সাথে, আমি নকল কোড ছাড়াই এই "alচ্ছিক প্যারামিটার" প্যাটার্ন অনুসরণ করে পদ্ধতিগুলি লিখতে সক্ষম হতে চাই।
অতিরিক্ত creditণের জন্য: EMPTY_LIST
বিপরীতে ব্যবহার করা কখন উপযুক্ত emptyList()
?