实例化Java函数内部的类

问题描述

我正在尝试创建一个函数,该函数用某些对象填充2d数组。我的功能如下:

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

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

解决方法

抽象类:

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);