在java中通过调用方法生成对象

在java中通过调用方法生成对象,java,Java,如果我们有MakeObject(字符串名)并调用此方法将创建Object[Name]=newobject() 我们怎么能做到呢?而且,如果我们想将对象[Name]从方法移动到类Clazz中的公共变量中, 示例: public class clazz { void MakeObject(String name) { Object[name] = new Object(); [name].UpgradeToClassVariable(); // It shou

如果我们有
MakeObject(字符串名)
并调用此方法将创建
Object[Name]=newobject()
我们怎么能做到呢?而且,如果我们想将
对象[Name]
从方法移动到类
Clazz
中的公共变量中,
示例:

public class clazz {
    void MakeObject(String name) {
        Object[name] = new Object();
        [name].UpgradeToClassVariable(); // It should be a global variable
    }
}
clazz的用法

public class main {
    public static void main(String[] args) {
        clazz c = new clazz();
        c.makeObject("Hello");
        c.Hello.doOperations(); // For example, if it's a String, doOperation() can be equals()
    }
}

在java中,
是解引用操作符:将对象置于“点”的左侧。这必须是一个参考。如果它是对nothing(null)的引用,则会发生NullPointerException

右边的东西是你发送给它的信息

因此,向对象发送消息“使自己成为全局对象”没有任何意义。类似于
MyClass.makeGlobal([name])
的东西可以,但java不支持这一点

类的结构是在编译时定义的。您不能在运行时添加属性,或将字段从实例更改为静态

“我想添加一个属性”的总体想法仍然存在,但不是在您所说的级别。例如,您可能需要一张
地图

以您的第二个片段为例:

clazz c = new clazz();
c.makeObject("Hello");
c.Hello.doOperations(); // For example, if it's a String, doOperation() can be equals()
这不是java的工作方式。Java将首先编译代码(
javac
),然后运行它。javac不运行任何代码,它只编译代码。因此,javac看到
c.Hello
,就在那里停下来,说:你好?什么我不知道你在说什么

这就是为什么不能使用字符串文字来创建这样的字段。


Java不是javascript、python或ruby。

对象[名称]
实际上是什么?您到底想实现什么?你可以通过反思来实现这一点,这是一个高级主题,但我怀疑你是一个新手,正在试图弄清楚如何完成你的任务,所以最好描述一下你的目标,这样我们才能更好地回答你的问题。@FedericoklezCulloca Object[Name]而不是Object[Name]。意思是对象的名称是[name],在名称中不能有“[]”,因为它们在java中有特殊的含义。但是,你能做的和你想要的非常接近的是使用。所以我们可以说,java不支持在运行时更改结构存在某种限制?@MoradAbdelrasheedMokhtar,就结构和元而言,当然。像每一种语言一样,你必须遵循一些结构。就代码概念而言,您可以这样做,但不是这样,您可以使用地图。毕竟,java是图灵完备的。