如何打印保存对象的变量名?
例如,我有以下代码:
myclass ob=new myclass()
如何打印出 "ob"?
如何打印保存对象的变量名?
例如,我有以下代码:
myclass ob=new myclass()
如何打印出 "ob"?
除非您使用允许每个对象都可以被赋予一个名称的类(例如通过使用getName()
检索的变量),否则对象是没有名称的。
特别地,用于引用对象的任何特定变量的名称对该对象本身是完全未知的。因此,您不能执行以下操作:
Object foo = new Object();
// There's no support for this
String name = foo.getName(); // expecting to get "foo"
(请注意,多个变量可能都指向同一个对象,并且不必有任何命名变量引用对象。)
打印对象类型名称:
System.out.println(myObject.getClass().getName());
解决方法。如果您需要对象名称,则可以在构造函数中进行初始化。
//in class myClass
private String objName;
myClass(String objN)
{
this.objName = objN;
..
}
public String getObjName() {
return objName;
}
//in main()
.
.
.
myclass ob = new myclass("ob"); //any other variables accessing this object
//eg. temOb = ob get the same object name "ob"
System.out.println("object name is: " + ob.getObjName());
myclass ob1 = new myclass("ob1");
System.out.println("object name is: " + ob1.getObjName());
System.out.println();
是用于在控制台打印输出的命令。
因此,如果您有自己创建和实例化的类,您可以执行以下操作:
MyObject obj = new MyObject();
System.out.println(obj);
这将打印出MyObject
的toString()
实现。默认的实现不是很有趣,因此要获取有用的信息,您需要覆盖toString()
。
object.getClass().getName()
会给你这个对象的完全限定名(即包.类名)。例如,String thing = new String(); thing.getClass().getName()将返回"java.lang.String"。
className.class.getName()
会给你这个类的完全限定名(即包.类名)。例如,String.class.getName()将返回"java.lang.String"。
String hashcode = ob.hashCode();
String obName;
java.lang.reflect.Field[] fields =
ob.getClass().getDeclaredFields();
for( final java.lang.reflect.Field field : fields )
{
if( field.hashCode().equals(hashcode) )
{
obName = field.getName();
break;
}
}
System.out.println(obName);
这样做可以达到所需的结果,但有点欺骗性。因为如果 toString() 返回的字符串实际上反映了您的变量名称(当然,只有您作为编码人员知道),您必须使用该方法使用的约定,即在此实现中,由于返回的字符串格式为 ClassName+counter,您必须使用该格式命名您的变量:myClass1、myClass2 等。如果您以其他方式命名变量(例如 className+A/B/C 等或 someRandomVariableName),尽管返回的字符串仍按照 toString() 方法实现返回 myClass1、myClass2 等,但它不会反映您实际在代码中使用的变量名称。
class myClass {
private static int counter = 1;
private String string;
private int objCounter;
myClass(String string) {
this.string = new String(string);
objCounter = counter;
counter++;
}
@Override
public String toString() {
return this.getClass().getName() + objCounter + ": " + this.string;
}
public static void main(String[] args) {
myClass myClass1 = new myClass("This is the text for the first object.");
myClass myClass2 = new myClass("This is the text for the second object.");
System.out.println(myClass1);
System.out.println(myClass2);
}
}
您无法获取对象引用的名称。但是可以获取其哈希码或计数器。
我解决了这个问题,方法如下:
class ObjectName
{
static int num;
ObjectName()
{
num++;
}
public int getObjectCount()
{
return num;
}
public static void main(String[] args) {
ObjectName ob1=new ObjectName();
System.out.println(ob1.getClass().getName()+" "+ob1.getObjectCount());
ObjectName ob2=new ObjectName();
System.out.println(ob1.getClass().getName()+" "+ob1.getObjectCount());
}
}
输出:
ObjectName 1
ObjectName 2
toString()
方法。这将允许你指定在调用toString()
时,你的类型返回的内容。System.out.println(MyObject);
即可。toString()
方法。import java.lang.reflect.*;
public class myclass {
private myclass ob;
public static void main(String args[]) {
Field fd[] = myclass.class.getDeclaredFields();
for (int i = 0; i < fd.length; i++) {
System.out.println(fd[i].getName());
}
}
}