有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

使用类型变量泛型的java调用方法

我有一个场景,我想创建一个名为D的支持类,其中包含一个泛型方法。我已经设置了类型变量的上限

class A{
    void show(){
        System.out.println("Hello A");
    }
}

class B extends A{
    void msg(){
        System.out.println("Hello B");
    }
}

class C extends A{
    void msg(){
        System.out.println("Hello C");
    }
}

class D{
    <T extends A> void display(T ob){
        ob.msg(); //here i want to do some tricks
    }
}

首先,我想分享我的目标。这里,B类和C类的msg()函数有不同的实现。我想创建一个名为D的支持类,它有一个display方法,使用display方法,我想根据实例化调用B或C类的msg()函数。你能告诉我怎样才能做到吗


共 (2) 个答案

  1. # 1 楼答案

    您需要在类A中有方法msg(),否则类D中的display()方法不知道您传递给它的对象中是否存在此方法。(如果有人创建了一个扩展了A但没有msg()方法的E类,而您将E传递给D.display(),该怎么办?)

    如果您不想在类A中实现msg()方法,那么您可以将其设为abstract(并且您还必须将类abstract

    abstract class A {
        public abstract void msg();
    
        // ...
    }
    
  2. # 2 楼答案

    这不需要泛型,Java中有一个叫做动态绑定的基本概念

    abstract class A{
        void show(){
            System.out.println("Hello A");
        }       
         abstract void msg();    
    }
    
    class B extends A{
        @Override
        void msg(){
            System.out.println("Hello B");
        }
    }
    
    class C extends A{
    
           @Override
           void msg(){
                 System.out.println("Hello C");
           }
    }
    
    class D{
        void display(A ob){
            ob.msg(); 
        }
    }
    

    在这里,提供给方法的适当实例将决定在运行时调用哪个类方法