接口中写泛型方法,实现类重写该方法会有什么问题么
class Student{
private String name;
}
public Interface Demo {
void say(String s, int i, T t);
}
public class DemoClass implements Demo {
@override
public void say(String s,int i, T t){
system.out.println(s+i+t.tostring());
}
}
public class Test{
private DemoClass demo;
public static void main(String args[]){
Student student = new Student();
student.setName("老王");
demo.say("英语", 30, student);
}
}
参考GPT和自己的思路:
如果接口中定义了泛型方法,实现类重写该泛型方法时需要指明具体类型参数,并且必须与接口方法的类型参数一致,否则会编译错误。在你提供的代码中,Demo接口的泛型方法中的参数类型T没有被使用,因此可以将其去掉,实现类中的泛型方法也不需要再指明T类型,可以直接使用。同时,Test类中应该先创建DemoClass对象后再调用其方法。以下是代码的修改示例:
class Student {
private String name;
public void setName(String name) {
this.name = name;
}
public String toString() {
return name;
}
}
public interface Demo {
void say(String s, int i, Object t);
}
public class DemoClass implements Demo {
@Override
public void say(String s, int i, Object t) {
System.out.println(s + i + t.toString());
}
}
public class Test {
public static void main(String args[]) {
DemoClass demo = new DemoClass();
Student student = new Student();
student.setName("老王");
demo.say("英语", 30, student);
}
}
参考GPT和自己的思路:
从你提供的代码来看,泛型方法在接口中定义,这意味着与接口定义中的泛型类型已经相关联的类型参数将被用于该方法。在实现接口的类中,你必须使用与接口中定义相同的类型参数,这在你提供的代码中已经做到了。
另外,实现类中的泛型方法需要与原始接口方法的返回类型和参数类型匹配。这也似乎已经按照你的代码实现了。
因此,对于你提供的示例,实现类中重写了接口中定义的泛型方法不会导致问题。它也可以编译和运行,输出所预期的结果。