繁体   English   中英

在 Java 中的函数内实例化一个类

[英]Instantiate a class inside a function in Java

我正在尝试创建一个用一些对象填充二维数组的函数。 我的函数如下所示:

void funcName(Element el){
    container[0][0] = new el(args);
}

这里唯一的问题是 Element 是一个抽象类,所以当我尝试实例化一个对象时,Java 给了我一个错误。 我想要做的是实例化构建为元素扩展的类的对象(即类 B 扩展元素)。 有没有办法将这些类作为参数传递,并让我的函数相应地创建它们?

抽象类:

public abstract class Element {

    public abstract void myMethod();
    
}

具体类:

public class ArrayElement extends Element{

    @Override
    public void myMethod() {
        System.out.println("Hello!");
    }

}

调用必须以这种方式完成:

public class Main {
    
    public static void main(String[] args) {
        Element element = new ArrayElement();
        calculate(element);     
    }
    
    // This syntax will let you use any class that extends from the Element class, since it guarantees that is convertible to the type that you need. Are called generics.
    public static <T extends Element> void calculate(T element){
        element.myMethod();
    }

}

尝试这个。

static abstract class Element {} 
static class B extends Element {}

static void funcName(Class<? extends Element> cls)
        throws InstantiationException, IllegalAccessException,
        IllegalArgumentException, InvocationTargetException,
        NoSuchMethodException, SecurityException {
    Element[][] container = new Element[1][1];
    container[0][0] = cls.getConstructor().newInstance();

funcName(B.class);

或者

static void funcName(Supplier<Element> s) {
    Element[][] container = new Element[1][1];
    container[0][0] = s.get();  // is equivalent to `new B()`
}

funcName(B::new);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM