[英]Same method for multiple classes that implement the same interface
对不起,我真的不知道如何标题,这是问题所在......
我有一个接口和多个实现接口的类。 接口中某些方法的实现在每个实现类中都是完全相同的。 我觉得应该有一种简化方法,所以我不必每次都写相同的代码。 例:
public interface Foo {
String getName();
}
public class FooImpl1 implements Foo {
private String name = "foo name1";
public String getName() {
return name;
}
}
public class FooImpl2 implements Foo {
private String name = "foo name2";
public String getName() {
return name;
}
}
所以打破..
有没有办法将getName的代码放在一个地方,每个类都有自己的名称变量?
有没有办法使getName静态,所以我不必创建一个新的实例
有更好的想法吗?
使用抽象类并初始化构造函数中的字段:
public abstract class Foo {
protected String name;
String getName() {
return name;
}
}
public class FooImpl1 extends Foo {
public FooImpl1 () {
name = "foo name1";
}
}
public class FooImpl2 extends Foo {
public FooImpl1 () {
name = "foo name2";
}
}
JB Nizlet指出,做这样的事情会更干净:
public abstract class Foo {
protected String name;
public Foo(String newName) {
name = newName;
}
String getName() {
return name;
}
}
然后在子类中调用super("foo name 1")
。
正如@Peter Lawrey所说,如果您已经有一个界面或者出于其他原因需要一个界面:
public interface IFoo {
String getName();
}
public abstract class Foo implements IFoo {
protected String name;
String getName() {
return name;
}
}
你可以采取一个非常简单的方法:
public interface Foo {
String getName();
}
public class Named implements Foo {
String name;
public String getName() {
return name;
}
}
public class FooImpl1 extends Named {
{name = "foo name1";}
}
public class FooImpl2 extends Named {
{name = "foo name2";}
}
它并不像你的例子那样适用于getter,但由于问题更通用,我认为值得一提的是,使用Java 8,你可以在接口中定义默认方法 。 所以如果你有一些更复杂的东西,比如:
public interface ComplexFoo {
String getFirstName();
String getLastName();
String getFullName();
}
您不必在每个子类中重复getFullName
实现,但可以在接口中指定它:
public interface ComplexFoo {
String getFirstName();
String getLastName();
default String getFullName() {
return getFirstName() + " " + getLastName();
}
}
虽然getter仍然需要重复,因为它们访问界面中尚未提供的成员:
public class FooImpl1 implements ComplexFoo {
private String firstName = "foo";
private String lastName = "name1;
private String getFirstName() { return firstName; }
private String getLastName() { return lastName; }
}
public class FooImpl2 implements ComplexFoo {
private String firstName = "foo";
private String lastName = "name2;
private String getFirstName() { return firstName; }
private String getLastName() { return lastName; }
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.