假设我有以下方式使用Planet和Star类以及GameLogic类
//Planet.java
package Game;
class Planet //invisible outside of package
{
public String getType() {return "Im a Planet";}
}
//Star.java
package Game;
class Star //invisible outside of package
{
public String getType() {return "Im a Star";}
}
//GameLogic.java
package Game;
public class GameLogic //notice the PUBLIC keyword
{
//arrayList of stars
//arrayList of planets
//a ton of methods for the logic of the game itself
}
这些都属于游戏包,它只对待没有输入/输出的整个游戏逻辑。
然后,在一个名为UI的不同包中,我有Text类(UI.Text)控制用户输入,打印输出并可直接访问GameLogic,因为游戏只能通过创建GameLogic类的实例来播放
//Text.java
package UI;
import Game.*;
public class Text
{
//some control vars
//MAIN method
//input and output methods
//bla bla bla
}
所以问题是:游戏将通过创建GameLogic实例在Text.java中实例化。鉴于此,如果我想从Star和Planet输出getType()函数,我必须完成" road"以下列方式将Text与Planet / Star连接
//GameLogic.java
package Game;
public class GameLogic
{
//same as before
public String getPlanetType(int n) {return planetArrayList.get(n).getType();}
public String getStarType(int n) {return starArrayList.get(n).getType();}
}
简而言之,getType()方法已经存在于“太远”的#34;因此,它迫使我创建这些简单但重复的桥梁#34;连接两端的方法。
TL-DR版本:
class A has getType()
class B has array of A
class C needs to access getType() from array of A in B
我认为这是一种非常低效且耗时的方法,并且有更好的选择(可能涉及接口?),所以如果有人能给我一些帮助,我将非常感激。
谢谢
答案 0 :(得分:1)
不要相信任何有关表现的事情。
唯一重要的是现实。
实际上,JIT通常会将您的尝试转变为微观优化颠倒。
含义:在看到真正的问题之前,不要担心性能(太多)。如果您遇到问题,请开始测量,而不是做出假设。
相反:专注于良好,干净的设计;遵循.loc
原则;并编写干净,可读,可维护的代码。这比付出这种微妙之处要多一百倍。
(并且只是举个例子:一个方法getType()
返回一个字符串已经看起来像一个破碎的设计。考虑使用枚举?或者甚至更奇怪:你是否意识到这一点单独使用不同的类,您的对象有不同的类型?)
如果你仍然认为你应该考虑表现,那么首先要阅读JIT,它是如何工作的,它做了什么,等等。