我是java新手,我想从具有接口(interface)的实现的类中调用方法类,而不知道类名“ClassA”,它只知道对象c并且我有2个文件。
文件(1)CobaInterface.java
package cobainterface;
public class CobaInterface {
public static void main(String[] args) {
ImplementedClass implementedClass = new ImplementedClass();
ClassA clsA = new ClassA();
implementedClass.myMethodFromClassA(clsA);
}
}
class ClassA{
public Integer getTwo(){
return 2;
}
}
interface MyInterface {
public void myMethod();
//here interface
public void myMethodFromClassA(Object c);
}
文件(2):ImementedClass.java
package cobainterface;
public class ImplementedClass extends CobaInterface {
public void myMethodFromClassA(Object c) {
//System.out.println(c.getTwo()); <- wrong when call method c.getTwo()
}
}
如果我想在不知道类名的情况下从 ClassA 调用方法 getTwo() 怎么样,它只知道文件 (2) 中的对象 c,如上面代码中所述。感谢您的提前。
最佳答案
您应该使用泛型类型,以便实现知道对象是什么,
interface MyInterface<T> {
public void myMethod();
//here interface
public void myMethodFromClassA(T c);
}
impl 变为,
package cobainterface;
public class ImplementedClass Implements MyInterface<ClassA> {
public void myMethodFromClassA(ClassA c) {
//System.out.println(c.getTwo()); <- wrong when call method c.getTwo()
}
}
大家一起,
class Scratch {
public static void main(String[] args) {
ImplementedClass implementedClass = new ImplementedClass();
ClassA clsA = new ClassA();
implementedClass.myMethodFromClassA(clsA);
}
}
class ImplementedClass implements MyInterface<ClassA> {
@Override
public void myMethod() {
}
@Override
public void myMethodFromClassA(ClassA c) {
System.out.println(c.getTwo());
}
}
class ClassA {
public Integer getTwo() {
return 2;
}
}
interface MyInterface<T> {
void myMethod();
void myMethodFromClassA(T c);
}
你也可以进行类型转换
System.out.println((MyClass)c.getTwo());
但是您将失去类型安全的所有好处。
关于Java - 如何在不知道类名的情况下调用带有接口(interface)的方法类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52546789/