现在假如我有一个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对象

解决方案 »

  1.   

    增加一个flag,表示调用哪个构造函数,在构造函数中给flag赋值。在set方法中根据flag的不同,决定是否抛出异常。java不是动态语言,想完全不让外面看见内部的方法,估计比较难。
      

  2.   

    我的目的是想让其他程序员在使用new一个User对象的时候控制代码是否通过编译
    如果
    user=new User();
    这样的直接new一个java对象是无法通过编译的。
    如果想要通过编译,必须按照下面的两种写法才能通过编译
    1.要么覆盖setName方法
    user=new User(){
      public void setName(){  }
    };2.要么使用有参构造函数
    user=new User("张三");而不是像你说的在程序执行的过程中抛一个异常,我的目的是想控制程序员去new一个对象
      

  3.   

    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就必须提供用户名第二种必须提供用户名,没有无参构造方法