gpt4 book ai didi

java - 如何在不知道其名称的情况下调用实现某个接口(interface)的类?

转载 作者:行者123 更新时间:2023-12-04 04:42:31 26 4
gpt4 key购买 nike

所以我正在构建一个游戏引擎,我需要能够从实现某个接口(interface)的类中调用方法(我只想调用接口(interface)实现的方法)。

我的问题是我不知道类名将实现它。

那么,例如,Java 如何在不知道类名的情况下在所有实现 Runnable 的类中调用 run() 方法?

最佳答案

真的,你问的是 工厂 模式或 依赖注入(inject) 容器,例如 Spring。

当然你可以调用接口(interface)上的方法,问题是如何获得实例 .当然,这必须在某处指定、编码或配置。如果将来可能有不止一个,配置是更可取的。

因此,更多的是一个真实的例子:

public interface MovementStrategy {
public Move selectMove (Actor actor, ActorSituation theirSituation);
}

public class MonsterTypes {
public static MonsterType GOBLIN = new MonsterType( "goblin", new AttackMover(1.2));
public static MonsterType TROLL = new MonsterType( "troll", new AttackMover(0.45));
public static MonsterType DEER = new MonsterType( "deer", new FleeMover(2.0));

// useful to have, also.
public static List<MonsterType> getAllRegisteredTypes();



public static class MonsterType {
protected String name;
protected MovementStrategy moveStrategy;
// TODO -- getters & setters for all properties.

// constructor.
public MonsterType (String name, MovementStrategy moveStrategy) {
this.name = name;
this.moveStrategy = moveStrategy;
}
}
}

public class AttackMover implements MovementStrategy {
// SPEC: generally move towards/attack PC, with varying speeds.
}
public class FleeMover implements MovementStrategy {
// SPEC: generally run away from PCs.
}

这可能不是一个完美的设计——它将“运动”(也就是寻找目标)与 Actor 的整体转向/ Action 混为一谈——但希望它能给你更多的想法。

关于java - 如何在不知道其名称的情况下调用实现某个接口(interface)的类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18671999/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com