java - Java 中的自实例化

标签 java class object oop instantiation

如何自实例化 Java 类?我不应该使用类文件以外的任何文件。还假设在我初始化 NAME 变量的行之后,他们在编译时不知道类的名称。

示例:

public class Foo implements Bar {
    public static final String NAME = "Foo";

    private void instantiate()  {
        Bar baz = (Bar)Class.forName(NAME).newInstance();
    }
    //...
}

将是错误的,因为它需要另一个名为Bar.java的文件。应该是:

public class Foo {
    /*
    Instantiate self...
    */
}

我加入了这个编程挑战网站,每个问题只允许提交一个文件。我想为我将用于挑战的所有类创建一个模板类。所以,我的想法是我会这样做:

public class Foo {
    public static final String NAME = "Foo";


    public static void main (String[] args) throws IOException {
        //Instantiate self and call launch(args)
        Foo foo = new Foo();
        foo.launch(args);
        System.exit(0);
    }

    public void launch(String[] args) {
        //...Do actual code here
    }
}

我只想更改类名称和 NAME 变量,而不必更改每次使用模板类时实例化类的方式。根据我当前的设置,我必须编辑以下行: Foo foo = new Foo(); 以及下面的行。

您可能还想知道为什么我必须调用 launch() 而不是在 main 方法中执行所有操作。这只是我从我的 Java 讲师那里得到的东西。这也是因为我无法在 main() 方法中使用非静态方法。

最佳答案

如果您“实现”任何东西,您需要定义一个接口(interface)。要么导入已经存在的一个,要么必须创建它。无论哪种方式,如果它是公共(public)类(抽象与否)或接口(interface),则它必须在单独的文件中定义。与 C++ 不同,这是 java 的要求。

如果:

public class Foo implements Bar { 
} 

那么您的项目必须至少包含:

Foo.java
Bar.java 

期间。没有如果/和/但是。

但是,如果您的项目中绝对必须只有一个文件,则必须获得一个字节码生成器并在运行时动态构建您的类和接口(interface)。

真正的问题是:您想要实现什么目标?如果是单例/工厂,其他人已经回答了。如果是为了减少编译单元的数量,那么你就不走运了。 Java 强制要求您必须这样做。

作者更新后编辑:

Java 可以让你做这样的事情:

Foo.java:

public class Foo { 
  public static void main(String[] args) { 
    Bar bar = new Bar(); 
  }
}
class Bar { 
   int bar_var; 
   Snafu fu = new Snafu(); 

   public Bar() {  } 
   public int getBarVar() { return bar_var; } 
} 
class Snafu { 
   int var; 
   public Snafu() { } 
}

.... 

这将实现您想要实现的目标。

关于java - Java 中的自实例化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1674885/

相关文章:

JQuery:如果元素有文本,则将类添加到元素

c++ - 从集合 <MyClass> mySet 中获取信息

Python 字典大小与对象大小效率

java - CXF java.lang.ClassCastException : com. sun.org.apache.xerces.internal.dom.ElementNSImpl 无法转换为 com.tibco.ur.schemas.getocr.Output

php - 在 PHP 的类中包含文件

java - 在浏览器中测量下载和上传速度

java - 如何Parcelable查看对象的成员?

javascript - 我们如何使用 javascript 将 HTML 字符串转换为对象?

java - Woodstox StAX - 如何关闭文本内容验证?

java - 如何在Java中递归解压缩文件?