public final class Debug{
  public static void println (Object message)  {
  System.out.println(message.getClass().getName());
  }
}

解决方案 »

  1.   

    谢谢 lkenshin(我来帮你up)
    但是,已经有部分程序使用了现有的 println (String message)方法。
    我不想对所有程序进行替换我的意思是,争取在不修改原有方法的接口上,增加得到类调用的信息。有办法么?
      

  2.   

    lkenshin(我来帮你up)
    你的这个方法只能输出Object属于哪个类型,String,Integer等
    楼主是要求能知道调用Debug 类的println (String message)方法的类是哪个吧?
      

  3.   

    public static void println (Object message)  {
      System.out.println(message.getClass().getName());
      }

    public static void println (String message)  {
        在这里输出一些信息
      }
    是两个完全不同的方法啊,可以同时存在于一个类里面啊 dugang106(冷风细雨):
    Object.getClass().getName()得到的是类名啊:不信,给你一个例子:=========================
    public final class Debug{
      public static void println (Object message)  {
      System.out.println(message.getClass().getName());
      }
    }
    ============================
    public class TestDebug {
    public static void main(String[] args){
    Debug d = new Debug();
    d.println(new TestDebug());
    }
    }
    输出的是TestDebug
      

  4.   

    楼主:
    public final class Debug{
      public static void println (Object message)  {
      System.out.println(message.getClass().getName());
      }  public static void println (String message)  {
      输出一些信息
      }
    }
      

  5.   

    to:lkenshin(我来帮你up) dugang106(冷风细雨)的意思是:你只能取到传入println函数里的那个Object的class
    而不能得到调用println函数的classpublic class TestDebug {
    public static void main(String[] args){
    Debug d = new Debug();
    d.println(new Debug());
    }
    }
    //这样输出的就是Debug;而不是楼主要的调用类的TestDebug
      

  6.   

    哎呀,谢谢大家的参与,可能是我表达不清楚,让大家误会了。
    哎呀,谢谢大家的参与,可能是我表达不清楚,让大家误会了。
    哎呀,谢谢大家的参与,可能是我表达不清楚,让大家误会了。我也知道可以在同一个类里定义两个参数不同的方法,
    我也知道可以在同一个类里定义两个参数不同的方法,
    我也知道可以在同一个类里定义两个参数不同的方法,但我不想这么做,我是想在
    println (String message)
    {}
    这个方法里输出message的同时,也能输出或记录是哪个类调用了我的debug类,
    谢谢大家
      

  7.   

    import java.io.PrintWriter;
    import java.io.StringWriter;public final class Debug
    {
        public static boolean traceCaller = true; //是否输出调用者    private Debug()
        {
        }    public static void println(String message)
        {
            if(!traceCaller)
            {
                System.out.println(message);
                return;
            }        String caller = null;
            try
            {
                throw new Exception();
            }
            catch(Exception e)
            {
                caller =getCaller(e);
            }        System.out.println(message + " [" + caller + "]");
        }    public static String getCaller(Exception e)
        {
            String trace = formatTrace(e);
            int index1 = trace.indexOf("\tat ");
            index1 = trace.indexOf("\tat", index1 + 2);
            int index2 = trace.indexOf(System.getProperty("line.separator"), index1 + 4);
            String result = trace.substring(index1 + 4, index2);
            return result;
        }    public static String formatTrace(Exception e)
        {
            StringWriter sw = new StringWriter();
            PrintWriter pw = new PrintWriter(sw);
            e.printStackTrace(pw);
            pw.flush();
            String trace = sw.toString();
            return trace;
        }
    }example:
    public class DebugTest
    {
        public void method1()
        {
            method2();
        }    private method2()
        {
            Debug.println("test message");
        }    public static void main(String[] args)
        {
            DebugTest test = new DebugTest();
            test.method1();
        }
    }
      

  8.   

    谢谢
    cbhyk() 
    谢谢
    lkenshin(我来帮你up) 等兄弟们的参与