作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
<分区>
我有这样一个界面:
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 中是否可行?如果可行,解决此问题的最简洁方法是什么?
我正在尝试用 Swift 编写这段 JavaScript 代码:k_combinations 到目前为止,我在 Swift 中有这个: import Foundation import Cocoa e
我是一名优秀的程序员,十分优秀!