【问题标题】:How can I do this in Java? I can do it in Javascript?我怎样才能在 Java 中做到这一点?我可以用Javascript做吗?
【发布时间】:2014-06-18 22:16:48
【问题描述】:

我正在尝试学习 Java,我有点了解 Javascript,但我想知道如何在 Java 中做到这一点

我将它用于 Javascript。

var player = {
X: 32,
Y: 32,
Cloned: false;

};

我会用这个来drawImage(player.x, player.y) 例如,我如何在java中做这样的事情?

【问题讨论】:

  • 你想做什么?你试过什么?
  • 我建议您花时间学习 Java,而不是依赖您的 JavaScript 经验。这两种语言完全不同。
  • Java 与 JavaScript 不同。
  • 我知道 Javascript 和 Java 不一样,但是 Javascript 我可以创建 player 变量并在其中创建一些其他 var,如果我想绘制图像,我可以使用 " player.x 或 player.y" 作为坐标?如果你得到我?
  • @user1231958 我认为 OP 已经知道...

标签: java javascript


【解决方案1】:

在 Java 中,即statically typed没有直接等效于所呈现的 JavaScript ad-hoc 对象1

相反,可以创建一个 [Player] class 代表“对象”,然后实例化并使用一个或多个实例。这种类/实例方法以及subtypingJava OOP model核心; Java 中没有转义或可行的替代方案 - 使用 Java 时,请编写 Java。

public class Player {
    protected int x;
    protected int y;
    // and maybe `cloned`, etc.

    // maybe an "action"
    public void move(int x, int y) {
        this.x = x;
        this.y = y;
    }

    // maybe a getter/setter
    // (although `move` above may obsolete the use of such setter)
    public int getX () { return x; }
    public void setX (int x) { this.x = x; }

    // and other relevant methods ..
};

以后的用法可能看起来像

// create new instance of class/type
Player player = new Player();
// manipulate and use
player.move(19, 81);
drawImage(player.getX(), player.getY());

虽然在 Player 类中提供了“setter”,但使用时只需要“getter”;我更喜欢使用动作(例如move),并减少可变状态适用,而不是允许直接的字段操作,因为这可以增加encapsulation。在任何情况下,请参阅How do getters and setters work? wrt 这个切线。

还要考虑"programming to interfaces";对于一个真正的实现,我可能会有一个实体接口,由 Player 类实现,它理解位置移动和位置。 (虽然这更加切题,但我希望我已经开始以这种方式编程“OOP”,并且我尝试避免基于实现类或子类型关系的类型协定!)


1 Java 确实如此,但它不是静态类型所固有的;例如,C# 有anonymous types(尽管静态类型和推理在函数内受到限制)并且不同的语言支持强类型记录和/或结构类型和/或在其他静态类型语言中的动态类型。然而,Java要求将其编入一个类中,以便在语言级别提供支持。

【讨论】:

  • Getters/Setters 是一种反模式。除非必要,否则我不会添加它们。
  • @user1231958 这取决于询问谁以及在何处使用此类 getter/setter。我同意 Java 方法通常 与“自然”的语言相比支持这样的成语;但无论如何,如果要直接修改状态(例如,不通过诸如move 之类的直接操作),那么我宁愿看到使用设置器而不是直接访问字段。
  • 没错,无论如何你都不应该直接暴露属性,甚至 getter/setter 都比公共属性好。
  • @user1231958 我通常信任默认包,但我刚刚更新了帖子以明确保护字段以解决该问题。
【解决方案2】:

你在这里混合了两种不同的东西。 Javascript 是一种用于网站脚本的客户端语言,而 Java 是一种通用的 OO 语言,对多个项目都很有用,并且可以在服务器端工作。

现在您想在 Java 中定义它。你可以使用一个类来做到这一点:

public class Player {
    private int x;
    private int y;
    private boolean cloned;

    public Player (int x, int y, boolean cloned)
    {
        this.x = x;
        this.y = y;
        this.cloned = cloned;
    }

    public void move (int x, int y)
    {
        this.x = x;
        this.y = y;
    }

    public Point getCoordinates()
    {
        return new Point(x, y);
    }
}

然后你实例化为new Player(32, 32, false);

这是一个很粗略的例子,确实可以改进,但基本上是这样的。

【讨论】:

  • 我不确定将 javascript 单独归类为“用于网站脚本的客户端语言”是否安全。
  • 它确实有其他用途(MongoDB等),但它的主要用途是作为网站客户端的脚本语言。
  • Java 是用于小程序的吗?
  • “MongoDB 等”是描述 JavaScript 应用程序的一种非常奇怪的方式。
  • 我并没有深入研究具体的 JS 应用程序,只是指出确实 JS 不仅可以用于网站。但是 JS 更多地用于网站。
【解决方案3】:

你可以使用 HashMap 在 Java 中尝试这个,我会给你一个例子,它可能不一样,但逻辑在里面。

HashMap player = new HashMap();
player.put("X", "32");
player.put("Y", "32");
player.put("Cloned", "false");

System.out.print( player.get("X") ); // will print 32
System.out.print( player.get("X") ); // will print 32
System.out.print( player.get("Cloned") ); // will print false

【讨论】:

    猜你喜欢
    • 2022-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-05
    • 1970-01-01
    • 2012-08-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多