gpt4 book ai didi

java - Java 中匿名类的代码重用

转载 作者:行者123 更新时间:2023-12-01 07:03:42 25 4
gpt4 key购买 nike

Java 7

我有以下界面:

public interface SqlOperator{

public String apply(Object o);

/**
* @return an operator representing the set defined
* by inversing the image of {@this operator}.
*/
public SqlOperator not();

//Some other methods
}

我有一些它的实现,如下所示:

public class Foo implements SqlOperator{

public SqlOperator not(){
return new Foo(){
@Override
public String apply(Object o){
return String.format("NOT (%s)", super.apply(o));
}
};
}

//other methods implementation
}

还有这个

public class Bar implements SqlOperator{

public SqlOperator not(){
return new Bar(){
@Override
public String apply(Object o){
return String.format("NOT (%s)", super.apply(o));
}
};
}

//other methods implementation
}

问题是 not() 方法对于目前的所有实现几乎都是相同的(目前我有 7 个),除了要使用 new 实例化的类> 运算符。有没有办法避免在我需要实现 SqlOperator 时编写此类样板代码。

最佳答案

在 Java-8 之前的时代,标准选项是创建一个抽象类,例如 AbstractSqlOperator Implements SqlOperator,它定义了具有某些标准实现的方法。然后具体实现扩展这个抽象类,而不是直接实现接口(interface)。

Java-8 引入了一种使用默认方法来执行此操作的新方法:

public interface SqlOperator{

public String apply(Object o);

/**
* @return an operator representing the set defined
* by inversing the image of {@this operator}.
*/
default public SqlOperator not() {
return new SqlOperator(){
@Override
public String apply(Object o){
return String.format("NOT (%s)", SqlOperator.this.apply(o));
}

@Override
public SqlOperator not() {
// double not: just return the original operator
return SqlOperator.this;
}
};
}

//Some other methods
}

关于java - Java 中匿名类的代码重用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33010896/

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