我有这段代码可以工作:
界面:
public interface Queries<T> {
List<User> runQuery(T query);
}
并使用界面:
public class UserQueries implements Queries<UserQuery> {
@Override
List<User> runQuery(UserQuery q){
}
}
我想用下面的代码替换上面的内容,但是它不起作用:
新界面:
public interface Queries {
// I want to pass the type parameter within the abstract method instead of the using Queries<T>
<T> List<User> runQuery(T query);
}
并使用新界面(版本 2):
public class UserQueries implements Queries {
// does not work, compiler complains:
// "The method runQuery(UserQuery) of type UserQueries must override or implement a supertype method
@Override
List<User> runQuery(UserQuery q) {
}
}
如何使用类型参数 <T>
在方法内而不是类内?
最佳答案
您正在尝试混合两个概念,一个是泛型,另一个是继承。
版本 1 在版本 1 中,您拥有通用接口(interface)
public interface Queries<T>
在实现中,您将其限制为接受 UserQuery
类型
public class UserQueries implements Queries<UserQuery> {
版本 2 在版本 2 中,您拥有带有通用抽象方法的具体接口(interface)
public interface Queries {
// I want to pass the type parameter within the abstract method instead of the using Queries<T>
<T> List<User> runQuery(T query);
}
因此,如果您实现Queries
接口(interface),那么您必须提供所有抽象方法的实现(如果您更改方法签名或方法语法,该方法将被视为类中的不同方法,但不是接口(interface)中的抽象方法)
关于java - 如何在方法声明中使用类型参数而不是类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56201191/