java - 如何在方法声明中使用类型参数而不是类

标签 java generics

我有这段代码可以工作:

界面:

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/

相关文章:

java - Hibernate JSF MySql,丢失数据库连接

swift - 某些 <protocol> 导致 exc_bad_access

java - Collections.sort(list) 和 Collections.sort(list,comparator) 之间的区别

Java - 知道在 attr 中包含我当前对象的 obj

Java Long Stream 包含特定数字

java - 递归泛型

java - 在泛型类中使用 equals

c# - 如何找出(类型是类型)C#

swift - 在 Swift 中使用模板键入别名声明

java - 在发送 HTTP 请求之前显示加载 jLabel