上次在华为面试,他就说要自定义一个类似与String的类,其他方法都不变,只是让toString出来的字符串前面加个“huawei”。
困惑中,有人能解答么。

解决方案 »

  1.   

    最偷懒,当然是用StringBuffer StringBuilder  
      

  2.   

    楼上说的很对啊,StringBuffer很容易就能实现!
      

  3.   

    那不就是再重写toString方法时直接在前面加上huawei不就可以了吗?
      

  4.   

    可是String类是final的,不能extends的
      

  5.   


    StringBuffer sb="huawei";
    sb.append(str);//str为你的String类
      

  6.   


    我觉得应该有两种可能:
      1。让你自己实现一个String同样功能类。 这个列就比较麻烦一点...
      2。考设计模式,让你包装一下。。
      

  7.   

    不能用继承可以用聚合或组全package default;
    public final class String {
           private java.lang.String value;      @Override
          public String toString(){
             .....
          }
    }
      

  8.   


    //可以使用动态代理,String实现了CharSequence这个接口
    import java.lang.reflect.InvocationHandler;
    import java.lang.reflect.Method;
    import java.lang.reflect.Proxy;
    class StringProxy implements InvocationHandler {
    private Object o;
    public Object bind(Object obj, String methodName) {
    this.o = obj;
    return Proxy.newProxyInstance(obj.getClass().getClassLoader(), obj
    .getClass().getInterfaces(), this);
    }
    public Object invoke(Object proxy, Method method, Object[] obj)
    throws Throwable {
    if (method.getName().equals("toString")) {
    Object result = method.invoke(o, obj);
    return "[proxy:"+result+"]";
    } else {
    Object result = method.invoke(o, obj);
    return result;
    }
    }
    }
    public class Client {
    public static void main(String[] args) {
    StringProxy proxy = new StringProxy();
    String str = "aa";
    CharSequence strProxy = (CharSequence)proxy.bind(str, "toString");
    System.out.println(strProxy.toString());
    }
    }
      

  9.   

    貌似是叫 组合模式 吧class MyString{ private String innerString;

    public MyString(){

    }

    public MyString(String str){
    innerString = str;
    }

    protected Object clone() throws CloneNotSupportedException {
    return super.clone();
    } public boolean equals(Object o) {
    return innerString.equals(o);
    } protected void finalize() throws Throwable {
    super.finalize();
    } public int hashCode() {
    return innerString.hashCode();
    } @Override
    public String toString() {
    return "huawei" + innerString;
    }

    }
      

  10.   

    String 类是final当然不能通过继承改变toString方法, 但是可以通过装饰者模式来达到这个目的, 就是给String 类在披上一层外衣。
      

  11.   

    重写String类的toString()方法吧,貌似就可以
      

  12.   

    我觉得设计一个这样的类怎么样?
    class  myString{
        private String str = new String();
        ...//other code
    @Override
        public String toString(){
            return "huawei"+str;
        }
    }