【发布时间】:2023-04-06 09:57:01
【问题描述】:
假设我有一个简单的界面:
interface IGroupBy {
String getGroupById();
}
假设我有一个清单:
List<IGroupBy> v = List.of();
但这意味着列表必须按名称实现该接口。 但是,如果我愿意接受任何具有返回具有该名称的字符串的方法的对象呢?
有没有办法以某种方式使用泛型在 Java 中获得结构类型?
List<T> v = List.of();
然后告诉Java编译器关于T?比如:
<T hasInterface:IGroupBy>
我想有一种方法可以使用这样的泛型:
interface IGroupBy<T> {
T getGroupById();
}
剩下的部分是方法名。但这仍然意味着您必须按名称/包引用相同的确切接口。
【问题讨论】:
-
继承那个接口有什么问题?
-
@VladHanzha 不是一个大问题,但结构类型而不是主格类型的动机是我们不想按名称使用界面的原因
-
在这种情况下,我建议你看看功能接口,如果我理解正确的话,它可以为你工作。
-
@VladHanzha 很酷,如果你能发布一个答案 - 我认为这将是 SO 谈论 java+structural typing+functional interfaces 的第一个答案之一
-
也许这有帮助(不确定这是否可能是重复的):stackoverflow.com/questions/1079785/… 我认为它与 Java 中尽可能接近