Java 从子类返回值

Java 从子类返回值,java,Java,我希望能够以支持更多类的动态方式调用ObjectAction#firstClick。我的目标不是直接访问测试类并从那里调用它 请记住,您不能使用静态上下文 public abstract class ObjectAction implements AchievementListener { public abstract void firstClick(GameObject object); } firstClick是我想动态调用的 下面是更多的代码 public interfac

我希望能够以支持更多类的动态方式调用
ObjectAction#firstClick
。我的目标不是直接访问测试类并从那里调用它

请记住,您不能使用静态上下文

public abstract class ObjectAction implements AchievementListener {

    public abstract void firstClick(GameObject object);

}
firstClick
是我想动态调用的

下面是更多的代码

public interface AchievementListener {    
}
它充当具有子类的侦听器类型,如
ObjectAction
ItemAction
GroundAction

这是枚举

public enum Achievements {
    TEST(new ObjectAction() {
        @Override
        public void firstClick(Object object) {

      }

    }); 

    private static final Set<Achievements> ACHIEVEMENTS = Collections.unmodifiableSet(
            EnumSet.allOf(Achievements.class));

    public static Optional<AchievementListener> getListener() {
        return ACHIEVEMENTS.stream().filter(a -> a.listener).findAny();
    }

    AchievementListener listener;

    Achievements(AchievementListener listener) {
        this.listener = listener;
    }
}
公共枚举成就{
测试(新的ObjectAction(){
@凌驾
公共void firstClick(对象){
}
}); 
私有静态最终设置成就=Collections.unmodifiableSet(
EnumSet.allOf(acgregations.class));
公共静态可选getListener(){
返回成就.stream().filter(a->a.listener.findAny();
}
成就监听器监听器;
成就(成就监听器监听器){
this.listener=listener;
}
}

#getListener()函数是我需要帮助的部分,它不起作用,因为它不返回AchieventListener,我要找的是类似getListener().getObjectActions().firstClick(GameObject对象)的东西;对于类似ItemActions的内容,它应该是getListener().getItemActions().executeAction(Item)

您已经创建了一个不声明任何方法的接口。然后在一个抽象类中实现该接口,该抽象类只声明一个抽象方法;因此,您不需要该抽象类,因为您没有使用必要的构造函数执行任何操作

您需要做的是像这样声明接口:

public interface AchievementListener {
    public void firstClick(GameObject object); // Declared the interface method
}
您现在可以离开抽象类,因为它没有用处,直接请求
AchievementListener

public class Test extends Achievement {
     @Override
     public AchievementListener process (Player player) {
         return new AchievementListener () {
             @Override
             public void firstClick(GameObject object) {
                 System.out.println("This works for sure ;)");
             }
         };
     }
}

简而言之,动态在接口中,因为您希望在所有子类中都有一个方法

我不是这么问的,伙计。。现在,如果我有一个名为firstClick(GroundObject)的GroundAction类,该怎么办????我们将如何执行firstClick。。我们怎么称呼它。。AchievementListener.firstClick(对象);我不喜欢那种态度,我只是想在自己的空闲时间帮助你。我将再试一次,但我认为您需要在什么用例中显示您需要它,因为我可以随意进入泛型而不需要帮助您。请更清楚地解释,并实际展示用例。对不起,伙计,我不是那个意思,但人们一直在回答我从未要求过的事情,然后我再次道歉。。。我需要一种调用firstClick(GameObject)的方法;我添加了一个例子@main post。