Java-扩展给定对象的任何实例的方法参数

Java-扩展给定对象的任何实例的方法参数,java,object,inheritance,methods,parameters,Java,Object,Inheritance,Methods,Parameters,因为我不知道如何表达我的问题,所以我决定在这里提问,通过谷歌搜索就可以得到帮助。我只是在寻找一种方法,告诉一个方法它应该接受扩展某个类的每个对象。以下是我迄今为止尝试过的东西: public void method( Object<? extends Component> obj ); public void method( Component c ); 公共作废方法(对象 第二个的问题是,我必须投下每一个实例 在方法()接受组件之前再次访问该组件 不,你不需要投下任何东西,这就

因为我不知道如何表达我的问题,所以我决定在这里提问,通过谷歌搜索就可以得到帮助。我只是在寻找一种方法,告诉一个方法它应该接受扩展某个类的每个对象。以下是我迄今为止尝试过的东西:

public void method( Object<? extends Component> obj );

public void method( Component c );
公共作废方法(对象
第二个的问题是,我必须投下每一个实例
在方法()接受组件之前再次访问该组件

不,你不需要投下任何东西,这就是多态性的工作原理

例如:

class A {
}

class B extends A {
}

class C extends B {
}

public class Main {

    private void method(final A a) {
    }

    public static void main(final String[] args) {
        final Main main = new Main();
        main.method(new B());
        main.method(new C());
    }
}
第二个的问题是,我必须投下每一个实例 在方法()接受组件之前再次访问该组件

不,你不需要投下任何东西,这就是多态性的工作原理

例如:

class A {
}

class B extends A {
}

class C extends B {
}

public class Main {

    private void method(final A a) {
    }

    public static void main(final String[] args) {
        final Main main = new Main();
        main.method(new B());
        main.method(new C());
    }
}

如果您希望定义一个采用组件子类型的方法,请使用
public void method(T){your code here}
。这适用于任何对象,即组件可以替换为具有子类的任何其他类。

如果您希望定义一个采用组件子类型的方法,请使用
public void method(T){your code here}
。这将适用于任何对象,即组件可以替换为具有子类的任何其他类。

第二种形式
公共无效方法(组件c);
是正确的,如果您需要类型转换,那么您将尝试作为参数传递一个类型不是Component或Component的子类的变量。我不知道为什么

使用类型对象声明变量通常不是正确的做法,您应该在知道时使用正确的类型定义它们


Typecast是一种告诉编译器您知道引用所指向的对象的类型的方法,而该引用由于任何原因没有该类型。

第二种形式
public void方法(组件c);
是正确的,如果您需要类型转换,那么您将尝试作为参数传递一个类型不是Component或Component的子类的变量。我不知道为什么

使用类型对象声明变量通常不是正确的做法,您应该在知道时使用正确的类型定义它们


Typecast是一种告诉编译器您知道引用所指向的对象的类型的方法,而该引用由于任何原因没有该类型。

很奇怪,在调用方法之前,您需要将类强制转换为组件。情况不应该是这样。您能提供需要强制转换的代码吗您是否还有其他问题。您确切地告诉方法扩展某个类是什么意思?IEntity e=es.createEntity();e.addComponent((组件)新位置(x,y,z));好了…
Object
Object
不是泛型类型,因此您的第一个解决方案不起作用。您的第二个解决方案应该可以工作,并且可以接受任何组件或组件的子类型。非常奇怪的是,您需要在调用方法之前将类强制转换为组件。情况应该不是这样。您能提供吗需要强制转换的代码段?可能您还有其他问题。您确切地说,告诉方法扩展某个类是什么意思?IEntity e=es.createEntity();e.addComponent((Component)new Position(x,y,z));好了…
Object
Object
不是泛型类型,因此您的第一个解决方案不起作用。您的第二个解决方案应该起作用,并且将接受任何组件或组件的子类型。这通常不是必需的。为什么不将参数定义为组件?“我只是在寻找一种方法,告诉一个方法它应该接受扩展某个类的每个对象。”我感觉你想在方法定义中使用“扩展”,但是的,简单的“组件”将适用于参数类型。这通常不是必需的。为什么不将参数定义为组件?”我只是在寻找一种方法,告诉一个方法它应该接受扩展某个类的每个对象。”我感觉你想在方法定义中使用“扩展”,但是是的,简单的“组件”将适用于参数类型。