java - 如何使用继承的类对象

标签 java class object inheritance

我有一个父类,Parent ,有两个子类,AB 。 A有一个类,Wrapper ,包含一个接口(interface) Function ,它允许程序员为每个包装器指定特定的方法。

Wrapper包含变量 Class<Parent> inputClassClass<Parent> outputClass ,指定输入和输出类型。 Wrapper应该将 A 映射到 A 或 B,或者将 B 映射到 A 或 B。

当我尝试调用包装器构造函数 Wrapper(Class<Parent> input, Class<Parent> output, Function func) 时,出现了问题。 Eclipse 给我一个错误,试图输入 A.classB.classinputoutput 。鉴于 A 和 B 是 Parent 的子类,我认为它们能够传递到构造函数中。我该如何实现这个?

public class Parent {
    protected int value;
    public void setValue(int x){ value = x; }
    public int getValue(){ return value; }
}


public class A extends Parent{
    public A(){ setValue(1); }
    public A(B b){ setValue( b.getValue()); }
}

public class B extends Parent{
    public B(){ setValue(2); }
    public B(A a){ setValue(a.getValue()); }
}


public class Wrapper{
    protected Class<? extends Parent> inputClass;
    protected Class<? extends Parent> outputClass;
    protected interface Function{
        public Parent of(Parent input);
    }
    protected Function function;
    public Wrapper(Class<? extends Parent> in, Class<? extends Parent> out, Function func) {
        inputClass = in;
        outputClass = out;
        function = func;
    }

    public Parent of(Parent input){
        try{
            Parent output = function.of( inputClass.getConstructor( input.getClass() ).newInstance(input) );
            return outputClass.getConstructor( output.getClass() ).newInstance( output );
        } catch(Exception e){
            e.printStackTrace();
            return null;
        }
    }
}

public class Main {
    public static void main(String[] args){
        ///Error occurs here. Can't take A.class in for Parent.class
        Wrapper wrapper = new Wrapper(A.class,B.class, new Function(){
            @Override
            public Parent of(Parent p) {
                return null;
            }
        });     
    }
}

最佳答案

问题不是来自 A.classB.class ,但是从界面Function嵌套在 Wrapper 内类(class)。我需要写new Wrapper.Function在 main 的构造函数中。

关于java - 如何使用继承的类对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52695136/

相关文章:

c++ - 结构中的类对象数组

ios - 无法更改 swift 类循环加载器的属性

java - 为什么允许将原始数据类型添加到 ArrayList?

java - org.springframework.web.servlet.PageNotFound noHandlerFound

java - 如何防止页面刷新? AJAX、Spring MVC

java - URL 编码对我的字符串进行两次编码

c++ - 从 Objective C 使用 C++ : how to allocate/deallocate?

java - ReSTLet 路由器相对路径错误

c++ - 来自不同类的内联类函数,都内联?

javascript - 如何更改多个数组对象的索引?