用户创建的新类?

时间:2010-01-28 05:35:55

标签: java dynamic user-controls types user-input

考虑这种情况:我有一个水族馆模拟器,我有5种不同类型的鱼。不同的类型意味着不同的属性(速度,颜色,饥饿等)。如果我希望模拟器的用户能够创建一种新类型的鱼并为其属性赋值,该怎么办?

程序员如何实现?我是否需要某种“事件处理”,它会在我的“Fish”类中添加一堆特定的代码行?这甚至是一个有效的想法吗?

(如果它必不可少,语言是Java。并且为了避免任何误解并防止诸如“这是单一工作吗?”之类的评论,是的。但是我不是在寻找答案,我对这个概念感到好奇。)

编辑:是的,我的错,我没有提到互动方式:GUI。

因此,想象一个名为“添加新物种”的标签,其中包含鱼类的每个属性(类型,速度,颜色等)的字段。因此,用户使用适当的值填充字段,当他点击“添加”时,将调用构造函数。至少那是我的想象。 :)

4 个答案:

答案 0 :(得分:1)

我只想使用地图:

class Fish
{
  Map<String,String> attributes = new HashMap<String,String>();
  setBusterFish()
  {
    attributes.put("speed", "5");
    attributes.put("colour", "red");
    attributes.put("hunger", "10");
    attributes.put("name", "buster");
  }
}

答案 1 :(得分:1)

Java是一种OO语言,它处理类和对象。诱人的,天真的解决方案是让你的程序处理鱼的“类”,就像它处理任何类的类,即创建一些Java代码,让编译器和加载器将它引入运行时。

这种方法可以使用,但有些尴尬。从本质上讲,你的“动态Java类”编码可能最终会比你的实际意图更大更复杂。

如果你真的要为不同的鱼提供不同的属性(不仅仅是这些属性的不同值),你真的需要这样做;即便如此,也有更简单的解决方案。

对于被问到的问题,我认为你真的只需要一个Fish课程。当用户定义一个新的时,他真正定义的是属性值。

如果您真的想要新的动态属性,那么您可以使用例如一个HashMap来存储名称/值对。您可以让用户添加"legs" / "4",然后按原样打印出新属性;但是你不能让鱼在这些腿上行走,因为你将缺少使用新属性的编码。

答案 2 :(得分:0)

让用户定义FishSpecies类的实例的属性值,并为FishSpecies提供一个createFish方法,该方法创建该种类的鱼(即具有这些属性值)。跟踪列表中的所有FishSpecies对象,可以让您有机会管理FishSpecies对象,并创建给定物种的Fish对象。

如果我正确地理解了你的问题,那么我认为使事情变得更复杂是一个错误。

答案 3 :(得分:0)

查看type object pattern。还谷歌我刚刚给了我发现的第一个参考文献之一...

您还可以查看Reflection pattern ...