gpt4 book ai didi

java - "Multi-level"泛型,带有子类化和接口(interface)

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:23:06 26 4
gpt4 key购买 nike

目的是允许任何两种类型的类“匹配”,只要它们遵循一个接口(interface)。也就是说,如果类 U 与 V 匹配,则它实现以下接口(interface)

public interface Matchable<U, V>

可以匹配

public class Matcher<U extends Matchable<U, V>, V extends Matchable<V, U>>

对于一个案例,我想匹配两个具有非常相似属性的类,所以我创建了一个基本的父类供它们继承:

public abstract class MatchingPairItem<T> implements Matchable<? extends MatchingPairItem<T>, T>
public class ClassA extends MatchingPairItem<ClassB>
public class ClassB extends MatchingPairItem<ClassA>

但我显然遗漏了一些通用类型,收到多个错误,例如:

type argument ClassA is not within bounds of type-variable U
Matcher<ClassA, ClassB> matcher = new Matcher<ClassA, ClassB>();
^
where U,V are type-variables:
U extends Matchable<U,V> declared in class Matcher
V extends Matchable<V,U> declared in class Matcher

谁能指出我正确的方向?

最佳答案

? extends MatchingPairItem<T> ,您正在尝试建模“类型参数是类的具体类型”。这根本不是 Java 泛型可以建模的东西。

我认为最好的选择是保留 MatchingPairItem有两个类型参数,一个代表“self”类型:

abstract class MatchingPairItem<S, T> implements Matchable<S, T> {}
class ClassA extends MatchingPairItem<ClassA, ClassB> {}
class ClassB extends MatchingPairItem<ClassB, ClassA> {}

当然,这可能会破坏您正在寻找的一些便利,但这是一个不幸的现实。

关于java - "Multi-level"泛型,带有子类化和接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26191432/

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