以下是我的课程。在Test类中,我无法返回SubClass的对象我收到错误
GenericClass类型中的方法method2(SuperClass,Class)不适用于参数(SubClass,Class)
public class GenericClass<T> {
public T method1(T obj, Class<T> clazz) {
System.out.println(obj);
return obj;
}
public T method2(T obj, Class<T> clazz) {
System.out.println(obj);
return obj;
}
}
public class Test extends GenericClass<SuperClass> {
public SuperClass printMethod1() {
SuperClass sClass = new SuperClass();
sClass.setName("name");
sClass.setEmail("email");
sClass.setAddress("Address");
return this.method1(sClass, SuperClass.class);
}
public SubClass printMethod2() {
SubClass subClass = new SubClass();
subClass.setName("testName");
subClass.setEmail("testEmail");
subClass.setAddress("testAddress");
subClass.setName2("name2");
return this.method2(subClass, SubClass.class);
}
}
public class SuperClass {
private String name;
private String email;
private String address;
public String getName() {
return this.name;
}
public void setName(String name_p) {
this.name = name_p;
}
public String getEmail() {
return this.email;
}
public void setEmail(String email_p) {
this.email = email_p;
}
public String getAddress() {
return this.address;
}
public void setAddress(String address_p) {
this.address = address_p;
}
}
public class SubClass extends SuperClass {
private String name2;
public String getName2() {
return this.name2;
}
public void setName2(String name2_p) {
this.name2 = name2_p;
}
}
我需要GenericClass中的参数Class类用于不同的目的(我没有把逻辑放在这里)
我尝试过铸造,但它不起作用。你能建议我如何在printMethod2中返回SubClass对象。
答案 0 :(得分:0)
声明带有绑定的类型变量应该适合您:
public <U extends T> U method2(U obj, Class<U> clazz) {...}
这意味着返回类型与传递给方法的对象类型相同。
这是唯一的解决方案,因为行
return this.method2(subClass, SubClass.class);
表明您希望该方法也返回与传递它相同的类型。
编辑:
示例代码的完整类看起来像这样:
public class GenericClass<T> {
public T method1(T obj, Class<T> clazz) {
System.out.println(obj);
return obj;
}
public <U extends T> U method2(U obj, Class<U> clazz) {
System.out.println(obj);
return obj;
}
}
(这里是关于Ideone的示例:http://ideone.com/SRlIfo。)