考虑以下情况。如何找到空列表采用哪种对象类型。
List<User> userList = new ArrayList();
List<Address> addList = new ArrayList();
method1(userList);
method1(addList);
void method1(List<?> list){
//Now list is empty;
//how to find list accepts User type object or Address type object
}
答案 0 :(得分:1)
这是不可能的。 Java在编译后删除了类型。
但你可以这样做:
<T> void method1(List<T> list, Class<T> tclass){
// you force the class T as argument
}
调用“method1”有点不同。
List<User> userList = new ArrayList();
method1(userList, User.class);
答案 1 :(得分:0)
如果对象类型中包含通配符,则无法从空列表中获取对象类型。如果您传递空列表并尝试访问列表,则会出现NullPointerException。如果您传递空列表而不使用列表,则它将运行。通配符用于未知类型。如果您使用带通配符的列表,则将根据其包含的对象确定类型。如果list为空,则表示您无法获得有关其所属对象类型的任何信息。 这是一个例子,我传递包含元素的列表,我能够获得它所属列表的对象类型。 您可以使用类似的东西来获取对象类型。如果你不能那么请解释你的用例,这将有助于你。谢谢。
public class GenericsTest
{
List<User> userList = new ArrayList();
User aa1 = new User(20, "Mine");
User aa2 = new User(10, "Yours");
userList.add(aa1);
userList.add(aa2);
List<Address> addList = new ArrayList();
Address bb1 = new Address("20", "A B Road", "Kolkata");
Address bb2 = new Address("10", "B C Roy Road", "KOlkata");
addList.add(bb1);
addList.add(bb2);
method1(userList);
method1(addList);
method2(userList);
method2(addList);
public static void method1(List<?> list)
{
if(list.get(0) instanceof User)
{
System.out.println("I am User");
}
if(list.get(0) instanceof Address)
{
System.out.println("I am Address");
}
}
public static void method2(List<?> list)
{
System.out.println("If you are not using list and have your own custom logic to find the type");
}
}
class User
{
int a1;
String b1;
public User(int a1, String b1) {
this.a1 = a1;
this.b1 = b1;
}
}
class Address
{
String line1;
String line2;
String line3;
public Address(String line1, String line2, String line3)
{
this.line1 = line1;
this.line2 = line2;
this.line3 = line3;
}
}