繁体   English   中英

如何在Java中使对象正确交互

[英]How to make my objects interact properly in java

我最近开始学习Java,这是我进行面向对象编程的第一步,但是在使对象正确交互方面遇到了麻烦,因此我有几个问题,这些问题看似非常简单,但由于某些原因,我无法在其他地方找到答案:

首先,我一直试图让一个对象从另一个对象读取值,在这种情况下,它是一个名为“游戏”的对象,它从多个名为“物品”的对象中读取属性,这是我可以使游戏对象从对象中读取任何值的唯一方法item对象是通过在item类中具有一个返回我想要的值的方法,并考虑到每个项目具有许多属性,而我希望游戏类能够简单地读取该属性,这似乎并不是一种特别有效的方法做这个。 那么,有什么方法可以简单地从对象中读取值吗? 例如简单地将变量称为item1.points或item2.name,其中item 2是对象名称,而points是对象内的变量名称?

其次,当我为每个项目分配值时(我让用户在游戏开始时分配了某些值),有没有办法简单地循环同样的问题,询问属性值并按顺序将其分配给我的项目? 即item1然后item2然后item3,而不是用选择语句来决定我要处理哪个项目?

基本上,这就是我目前遇到的所有麻烦,我们将不胜感激。 另外,在有人要求我进行简单查找之前,我一直尝试进行无济于事的查找,但是我可能只是使用了错误的关键字进行搜索,因此在此方面的任何帮助也将不胜感激。

谢谢

对于您的第一个问题,我同意凯尔(Kyle)的观点。 Java bean标准基于访问器方法:getter和setter。 像Eclipse这样的IDE可以帮助您自动生成这些方法。

关于通过对象属性进行交互,您可以使用Apacha Commons Beanutils项目执行此操作:

// Copy properties from someObject to myTargetObject
Map attributes = BeanUtils.describe(someObject);
SomeBean myTargetObject = new SomeBean();

for(String propertyName : attributes.keySet()){
  System.out.println("Value for attribute " + propertyName + " is " + attributes.get(propertyName));

  // Updates target object
  BeanUtils.setProperty(myTargetObject, propertyName, attributes.get(propertyName));
}

第一个问题的答案是,是的,任何标记为public字段都可以直接访问,但这违反了信息隐藏的目的,而信息隐藏是OOP的核心。 您的第二个问题要困难一些。 从技术上讲,您可以像这样遍历对象的属性,但是这需要您使用反射,这可能比收益多。

同意凯尔。 您也可以考虑将那些object.item_n属性收集到某种类型的属性集合中(例如HashMap<String, String> textualproperties ),然后遍历这些对象或其他对象。

对于第一个问题,请确保两个类都在同一个程序包中,并且将成员声明为public(不推荐)或protected(更好),或者不指定任何访问说明符(这比protected的限制要严格一些) )。 如果您遵循此规则,则这两个对象都属于同一包中定义的类,而无需获取/设置程序即可访问/修改彼此的成员。

对于第二个问题,请使用反射来逐一遍历成员。 在这里查看: http : //java.sun.com/developer/technicalArticles/ALT/Reflection/

它将告诉您如何动态查找类的方法,成员等。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM