日期:2014-05-20  浏览次数:20766 次

在new一个java对象时,如何控制程序员是否必须实现一个方法
现在假如我有一个java类User
里面有一个
public void setName(){

}
方法

以及User类的两个构造方法
public User(){

}

public User(String name){

}

我现在想要其他人在new一个User对象user的时候,如果
user=new User();使用的是无参构造函数建立实体时,必须覆盖setName方法
而如果
user=new User("张三");使用的是有参构造函数建立实体时,就不用覆盖setName方法。
我该怎么做才能控制别人按照我的意思这么去new一个User对象
new一个java对象

------解决方案--------------------
增加一个flag,表示调用哪个构造函数,在构造函数中给flag赋值。在set方法中根据flag的不同,决定是否抛出异常。

java不是动态语言,想完全不让外面看见内部的方法,估计比较难。
------解决方案--------------------
lz就不该提供无参构造方法啊,只提供一个有参构造,他就只能使用有参的形式,你的第一种写法除非是抽象类。
------解决方案--------------------


abstract class User {
public abstract void setName();
}

class NamedUser extends User {

public NamedUser(String userName) {
}

@Override
public void setName() {
}
}






class User {
 public User(String userName) {
}
}



第一种如果直接new user对象的话必须实现set方法,如果new nameduser就必须提供用户名

第二种必须提供用户名,没有无参构造方法