我有一个对象的多个不同实现,它实现了我调用interface
的自定义Board
。
Board
包含一个类似于以下内容的方法
public void ConvertFromString(String formattedString);
每个实现Board
的对象在其构造函数中调用ConvertFromString()
。
如下所示。
public void BoardImpl1 implements Board
{
public Board(string B)
{
ConvertFromString(b);
}
public void ConvertFromString(String formattedString)
{
//do some parsing on string and set up the BoardImpl properties
}
}
ConvertFromString为public会导致警告,因此我找到的解决方法之一就是使BoardImpl
成为最终版本。有没有更好的方法来解决这个问题?
答案 0 :(得分:2)
//对字符串进行一些解析并设置BoardImpl属性
该方法应该只负责convertFromString。
1)使方法最终
public class BoardImpl implements Board{
public void final convertFromString(String formattedString)
{
//do some parsing on string and set up the BoardImpl properties
}
}
2)解决方案生成abstract class
并调用superClass构造函数,这样就不必调用每个子类但是不要使用子类中的属性,因为它们没有被使用
public abstract class AbstractBoard implements Board{
public AbstractBoard(String s){
convertFromString(s);
}
}
3)而我喜欢的一个人用构图制作东西
public class Client {
private Board board;
public Client(String s){
board.convertFromString(s);
}
public void setBoard(Board board){
this.board = board;
}
}
然后在董事会中,您可以将决定董事会的责任委托给工厂,或者如果没有州{a}}
答案 1 :(得分:1)
ConvertFromString
真的属于Board
界面吗?如果您有一个以不同方式初始化其属性的板,该怎么办?如果可以,我会考虑重构董事会课程。
public class Board {
public Board(Properties properties) {...}
}
我认为你在没有调用公共ConvertFromString
方法的情况下设置它的原因是因为设计有点偏差。 ConvertFromString
对其实现做出了假设。
答案 2 :(得分:0)
我无法通过以下代码获得编译警告
public interface Board {
public void ConvertFromString(String formattedString);
}
public class BoardImpl1 implements Board {
public BoardImpl1(String b) {
ConvertFromString(b);
}
public void ConvertFromString(String formattedString) {
//bla bla
}
}