オブジェクトを作成するとします。
class newClass{
public static void main(String[] args){
Object o = new Object();
}
}
指定されたオブジェクトの名前を文字列「o」または任意の形式で返すことは可能ですか?
オブジェクトを作成するとします。
class newClass{
public static void main(String[] args){
Object o = new Object();
}
}
指定されたオブジェクトの名前を文字列「o」または任意の形式で返すことは可能ですか?
いいえ、これは不可能です。本当にこれが必要な場合は、おそらく間違った設計を使用しています。オブジェクトには名前がないことに注意してください。変数には名前があります。
いいえ。オブジェクトは、外の世界がそれを何と呼んでいるのか、つまりどのような参照を持っているのかを知りません。
Javaでオブジェクトの名前を返すことは可能ですか?
次のようなものを書く場合:
String name = obj.toString();
オブジェクトの文字列表現を返しますが、これは人間が読める形式ではありません。それを行いたい場合は、カスタム オブジェクトを作成して toString() メソッドをオーバーライドする必要があります。
public class MyObject {
private String name;
public String toString() {
return name;
}
}
今あなたが書くとき:
String name = myObj.toString();
人間が読める形式で名前を返します。ただし、カスタム オブジェクトを作成する場合、これは要件によって異なります。このように、とてもシンプルでうまく機能します。
これは不可能です。
を使用しMap<String, Object>
て、オブジェクト名からオブジェクト値へのマッピングを格納し、キーを返すことができます。
実際には、オブジェクトの「名前」はコンパイル時定数です。つまり、コードをコンパイルすると変更されないので、
Object o = new Object();
return "o";
文字通りあなたが望むことをします。なぜそれをしたいのですか?
これは、Java リフレクションを使用して行うことはできません。ただし、デバッグ情報をオンにしてコンパイルすると、Java クラス ファイルに情報が格納されます。ASMのようなバイトコード エンジニアリング ライブラリを使用して、それを掘り下げることができます。
注:私はサジモンの答えを読んだところですが、彼はある程度エレガントな方法を持っています
まず第一に、みんなの答えは正しいです
しかし
本当に必要なら
Object クラスを MyObject のようなもので拡張します
public class MyObject {
private String objectName;
public MyObject(){
}
public MyObject(String name){
setObjectName(name);
}
public getObjectName(){
return this.objectName;
}
public setObjectName(String name){
this.objectName = name;
}
}
ただし、オブジェクトを作成するたびに、代わりに MyObject インスタンスを使用し、オブジェクト名をコンストラクターパラメーターとして追加します
MyObject mine = new MyObject("mine");
そうは言っても、なぜそれが必要なのかについては、まだ未解決の問題です。:)
Java はエイリアシングをサポートしているため、これは実際には意味がなく、可能でもありません。エイリアシングとは、オブジェクトが 1 つの変数のみによって参照されるという保証がないことを意味します。
現在のスコープ内の参照のみがその時点で使用されるため、スコープは問題全体をさらに難しくします。複数ある場合もあります。
このコードで何を達成しようとしているのかを説明していただけると助かります。
前の回答に加えて、すべてが同じオブジェクトを参照する、異なる識別子を持ついくつかの異なる変数が存在する場合があります。変数は、異なる時点で異なるオブジェクトを参照する場合があります。
オブジェクトから文字列へのマッピングが必要な場合は、Map<Object,String>
.