gpt4 book ai didi

java - 如何指定方法 AnyObject

转载 作者:行者123 更新时间:2023-11-30 08:11:46 25 4
gpt4 key购买 nike

我想在接口(interface)中指定一个方法,实现方法的签名(基于 JPA 2)是:

List<T> getByStringValue(SingularAttribute<? super T, String> attribute, String value)

我想在从 jpa 抽象的接口(interface)中指定此方法(Object<? super T, String> 是不可能的)。实现方法可能有不同的签名,但我希望它接受 SingularAttribute<? super T, String>我想在类型安全查询中使用它而不需要进行转换。

最后,我想在“存储库”接口(interface)中指定所有实体交互,并希望提供一个基于 JPA 的实现来覆盖所有实体的大部分内容(以最大限度地减少冗余代码)。我已经完成了 CRUD-ops 和 getAll 的工作。现在我希望我能为 getByCriteria 提供一种通用方法(目前一个 Critera 就足够了)。

最佳答案

Java 不允许非泛型参数部分本身是某种通配符,例如任何具有某些泛型参数的类:

<T> void method(*<T, String> o) // can't do this

但是您可以定义一个抽象类型,并让您想要使用的所有类都实现它,例如:

interface StringGetter<T> {
T getByStringValue(String value);
}

然后:

public class WidgetStringGetter implements StringGetter<Widget> {
public Widget getByStringValue(String value) {
// whatever
}
}

和:

public static <T> T factory(StringGetter<T> getter, String value) {
return getter.getByStringValue(value);
}

最后:

Widget w = factory(new WidgetStringGetter(), "foo");

关于java - 如何指定方法 AnyObject<? super T,字符串>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30297197/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com