我正在尝试学习Java,我有点了解Javascript,但我想知道如何在Java中做到这一点
我将此用于Javascript。
var player = {
X: 32,
Y: 32,
Cloned: false;
};
我会用它来绘制图像(player.x,player.y)例如,我如何在java中做这样的事情?
答案 0 :(得分:2)
在Java中,statically typed, no 直接等效于 1 提供的JavaScript ad-hoc对象。
相反,可以创建表示“对象”的[Player] class,然后实例化并使用一个或多个实例。此类/实例方法以及subtyping是Java 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?这个切线。
还要考虑"programming to interfaces";对于一个真正的实现,我可能会有一个Entity接口,由Player类实现,它可以理解位置移动和位置。 (虽然这更加切合实际,但我希望我已经开始以这种方式编写“OOP”,并尝试基于实现类或子类型关系来避免类型契约!)
1 这对Java来说是正确的,但它不是静态类型所固有的;例如,C#具有anonymous types(虽然静态类型和推理在函数内是有限的),并且不同的语言支持强类型记录和/或结构类型和/或动态类型,否则是静态类型语言。但是, 要求将其编入类中,以便在语言级别获得支持。
答案 1 :(得分:1)
你在这里混合了两件不同的东西。 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);
。
这是一个非常粗略的例子,确实可以改进,但基本上就是这样。
答案 2 :(得分:0)
你可以使用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