Java 泛型难题

标签 java generics

相关代码如下:

public interface Artifact {}    
public interface Bundle implements Artifact {}
public interface Component implements Artifact {}

public interface State<T extends Artifact> {
    void transition(T artifact, State<T> nextState);
}

这允许我定义这个枚举:

enum BundleState implements State<Bundle> {

    A, B, C;

    public void transition(Bundle bundle, State<Bundle> nextState) {}
    }
}

但是我想要的方法签名是:

    public void transition(Bundle bundle, BundleState nextState) {}
    }

但这不编译。显然问题在于我如何在 State 界面中定义 T,但我不知道如何修复它。

谢谢, 唐

最佳答案

事情可能开始变得笨拙,但您可以State 更改为:

public interface State<T extends Artifact, U extends State<T, U>> {
    void transition(T artifact, U nextState);
}

并将 BundleState 更改为:

public enum BundleState implements State<Bundle, BundleState> {
    A, B, C;

    public void transition(Bundle bundle, BundleState nextState) {}
}

关于Java 泛型难题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3915538/

相关文章:

java - 二维坐标上的流/IntRange?

c# - List<T>.AsReadOnly() 与 IReadOnlyCollection<T>

java - 在泛型类中嵌套泛型

java - 变量类型(通用或非通用)更改属性行为

java - 抛出检查异常

java - 粒子系统 libGDX

java - 如何根据 String 类型方法(java)中的 if 语句返回多个值?

.net - 代码契约(Contract) : How do I supply a contract class for a generic interface?

generics - Out-projected 类型 'ArrayList<*>' 禁止使用 'public open fun add(index: Int, element: E): Unit defined in java.util.ArrayList'

java - 我如何获取 fragment 以将 onClickListener 结果发送回主要 Activity