gpt4 book ai didi

java - 如何使用这样的Java接口(interface)?

转载 作者:行者123 更新时间:2023-12-01 07:55:29 25 4
gpt4 key购买 nike

我正在开发一个程序,我想使用接口(interface)。就像 Bukkit 用于 Player 类的方式, here 。我多次观看和阅读有关界面的教程,甚至尝试自己进行测试,但没有成功。

假设我有一个“用户”界面,其中有一个返回字符串的方法占位符。该方法将被命名为 getName()。

我想做

User user = (INSTANTIATE SOMEHOW);
System.out.println(user.getName());

这在 Bukkit 的实现中以大致相同的方式实现

Player player = Server.getPlayer("Jimmothy");
System.out.println(player.getName());

我只是不知道如何让这样的事情发挥作用。为了实例化玩家类,您可以使用众多“getPlayer()”方法之一。唯一的问题是包含这些方法的类也是接口(interface),所以我也不知道如何获取接口(interface)的实例。搜索代码也没有帮助,因为我似乎无法找到这些类中的方法在哪里以及是否实际上是使用覆盖或其他东西构建的。 (如果这就是覆盖的工作原理)。

谁知道呢,也许我只需要知道如何实例化或获取用户界面的实例,我就已经准备好了。我知道您无法使用“new ClassName();”创建接口(interface)实例我从来没有真正理解过它们,但我真的很想理解。

这可能看起来是一个非常愚蠢的问题,我确信答案很简单,但帮助会很棒! :) 感谢您的阅读。

最佳答案

恭喜您,您找到了factory method !让我们直接跳到代码。

Test.java:

interface Player {
String getName();
}

class PlayerImpl implements Player {
public PlayerImpl(String name) {
this.name = name;
}

@Override
public String getName() {
return name;
}

private String name;
}

class Server {
public static Player getPlayer(String name) {
return new PlayerImpl(name);
}
}

public class Test {
public static void main(String[] args) {
Player foo = Server.getPlayer("foo");
System.out.println(foo.getName());
}
}

如您所见,Server 类有一个 static 方法,以 User 类型返回 UserImpl 实例。这就是工厂方法。

这可能看起来(在本例中确实是)不必要的复杂化,但它有一个关键的优点:它将某个“具体”类的使用与其实现的接口(interface)解耦。这提供了更大的灵 active :

  1. 它隐藏了实现,以便您可以在多个不同的实现之间自由切换,只要它们都实现了 User 接口(interface)。从外面看,它们看起来都一样。

  2. 它允许实现池化(每次您请求某个名称时,都会为您提供相同的实例)或任何其他分配策略。

  3. 它让您可以控制对象的创建。您可以执行检查等操作。

如果提供了工厂方法,那么您不应该使用new实例化对象。如果您确实需要,您将必须寻找该接口(interface)的实现。例如,PlayerImpl:

Player foo = new PlayerImpl("foo");

再说一次,这不是 PlayerImpl 应该如何使用的。

关于java - 如何使用这样的Java接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30697019/

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