gpt4 book ai didi

Java 可选参数化接口(interface)

转载 作者:搜寻专家 更新时间:2023-11-01 02:36:26 25 4
gpt4 key购买 nike

<分区>

我有这样一个界面:

public interface Foo<T> {
default void doStuff(T val1, T val2) {}

default void doStuff(T val) {}
}

接口(interface)背后的想法是您可以实现其中一种或另一种方法。那么我有一个像这样的抽象类:

abstract public class AbstractFoo<T> implements Foo<T> {
//Bunch of Stuff
}

最后是这样的实现:

public class AwesomeOne extends AbstractFoo<String> {
@Override
public void doStuff(String val) {
//Do Stuff
}
}

这是另一个实现的例子:

public class AwesomeTwo extends AbstractFoo<String> {
@Override
public void doStuff(String val1, String val2) {
//Do Stuff
}
}

这很好用。现在,我希望能够为 doStuff(val1, val2) 方法指定 2 种不同的类型。所以我希望能够做这样的事情:

public class AwesomeThree extends AbstractFoo<String, Double> {
@Override
public void doStuff(String val1, Double val2) {
//Do Stuff
}
}

这就是我的界面将如何改变:

public interface Foo<S, T> {
default void doStuff(S val1, T val2) {}

default void doStuff(T val) {}
}

但是我很难让抽象类处理它。因为虽然我可以将我的抽象类更改为:

abstract public class AbstractFoo<S, T> implements Foo<S, T> {
//Bunch of Stuff
}

这会像这样改变实现类:

public class AwesomeOne extends AbstractFoo<Object, String> {
@Override
public void doStuff(String val) {
//Do Stuff
}
}

这可行,但是......这并不是一个真正干净的解决方案。这也会让我重构所有现有的实现。

基本上我想用简单的英语说:

When implementing the Foo interface, you can implement either of the 2 methods specified in the interface. If you are implementing the single parameter method, doStuff(T val), you only need to specify 1 parametrized type. If, however, you are implementing the double parameter method, doStuff(S val1, T val2), you have to specify both parameterized types.

这在 Java 中是否可行?如果可行,解决此问题的最简洁方法是什么?

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