【问题标题】:How to dynamically create a class and instantiate it in Java?如何在Java中动态创建一个类并实例化它?
【发布时间】:2013-05-22 22:27:32
【问题描述】:

我对 Java 还很陌生,而且我是从 C++ 背景开始接触它的。我正在使用一个在调用受保护的构造函数之前必须扩展的类。我只需要一个实例中的类。有没有办法可以动态创建类并同时实例化它?

我发现了类似的帖子,但没有达到目标。我以下面的代码为例,但当然它在语法上是不正确的。

final ffd.tokens.CountryTokens cToken = new class USA extends ffd.tokens.CountryTokens
{
    USA (String value)
    {
        super(value);
    }
} ("USA");

【问题讨论】:

标签: java class


【解决方案1】:

这样的?

final ffd.tokens.CountryTokens cToken = new ffd.tokens.CountryTokens("someValue")
{
// override something
};

更正:

即使使用受保护的方法,您也可以创建一个扩展 ffd.tokens.CountryTokens 的构建器(很疯狂吧?)

public abstract class CountryBuilder extends ffd.tokens.CountryTokens {
   public CountryBuilder () { super("useless-data"); }    
   public abstract ffd.tokens.CountryTokens build (String val); 
}

使用:

CountryBuilder builder = new CountryBuilder (){
   @Override
   public ffd.tokens.CountryTokens build(String val) {
      return new ffd.tokens.CountryTokens(val) {};
   }
};

builder.build("USA");
builder.build("Canada");

我想你明白了。

【讨论】:

  • 问题是 CountryTokens counstructor 受到保护。
  • 这很酷,我一直忘记这种模式。但我只是希望有一个单一的解决方案。不过,感谢所有伟大的投入。
【解决方案2】:

我想我明白了。我一直在考虑使用 Java 进行动态分配,但如果我只是创建一个本地实例,我就是这样做的。

class USA extends ffd.tokens.CountryTokens
{

    public USA() { super("USA"); }

} USA country;

现在我有了USA 类型的局部变量country

【讨论】:

    猜你喜欢
    • 2017-10-31
    • 2020-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多