Java 对象实例操作

Java 对象实例操作,java,string,object,Java,String,Object,如果我有一个对象实例,比如a4,有没有办法打印出实例的名称 所以对于实例a4,我希望我的输出是a4。我发誓不要跟踪你 简短回答:没有 详细回答:不可能使用反射API获取局部变量的名称,因为JVM根本无法使用它。请看这里: 这是一件非常糟糕的事情。你为什么要这么做?简单的答案是;如果希望对象具有名称,请为其指定一个name字段,并将此字段添加到toString() 局部变量仅在方法的调试信息中可用。可以读取方法的字节码并对名称进行反向工程,但这需要大量的工作 考虑 Object a1 = ...

如果我有一个对象实例,比如a4,有没有办法打印出实例的名称


所以对于实例a4,我希望我的输出是a4。

我发誓不要跟踪你

简短回答:没有

详细回答:不可能使用反射API获取局部变量的名称,因为JVM根本无法使用它。请看这里:


这是一件非常糟糕的事情。你为什么要这么做?

简单的答案是;如果希望对象具有名称,请为其指定一个
name
字段,并将此字段添加到
toString()


局部变量仅在方法的调试信息中可用。可以读取方法的字节码并对名称进行反向工程,但这需要大量的工作

考虑

Object a1 = ...
Object b1 = a1;
同一对象由两个局部变量引用。对象可以在任意多个位置被引用。e、 g空字符串对象通常是Java程序中引用最多的对象。在普通程序中,它可以出现在10Ks的位置



我试图使用一个只在HashMap键中传递的方法向HashMap添加一个数组。我获取密钥,提取HashMap中已经存在的数组,对其进行克隆,然后使用实例的名称作为密钥将该克隆放置在HashMap中

假设您将一个数组传递到如下方法中

public void addArray(int... array) {
此时,数组引用的“名称”是
array
,不会有任何区别

您需要的是传递希望数组具有的名称,因为调用者无法知道被调用者用作局部变量的是什么。通常,变量一开始就没有名称

addArray(1, 2, 3);

注:
nums
实际上并不需要,因为可以优化局部变量。i、 e.
nums
很有可能在运行时不存在


你需要做的是

public void addArray(String name, int... array) {
    map.put(name, array);
}

Use Java reflection API可能重复。您使用的是哪种语言?实例的意思是,如果您有一个字符串类型的对象,您想打印字符串,是吗?如果您有一个方法,并且其中有一个变量声明对象[]myArray;(例如),那么您已经知道变量名了。那么,你到底有什么问题?我不清楚。也许您应该发布一些代码。我正在尝试使用一个只在HashMap键中传递的方法向HashMap添加一个数组。我获取密钥,提取HashMap中已经存在的数组,对其进行克隆,然后使用实例的名称作为密钥将该克隆放置在HashMap中。您可以发布代码吗?这是一个很难概念化的设计问题。但是为什么不将数组放在哈希映射中,首先将实例名作为键?您必须克隆阵列吗?
int[] nums = { 1, 2, 3 };
addArray(nums);
public void addArray(String name, int... array) {
    map.put(name, array);
}