假设我有以下方式的 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
}
这些都属于 Game 包,它只处理游戏的整个逻辑,没有输入/输出。
然后,在另一个名为 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() 函数,我必须按照以下方式完成连接 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() 方法已经存在于“太遥远”的类中,因此它迫使我创建这些简单但重复的“桥梁”方法来连接两端。
TL-DR 版本:
class A has getType()
class B has array of A
class C needs to access getType() from array of A in B
我认为这是一种非常低效且耗时的方法,并且有更好的替代方法(可能涉及接口(interface)?),所以如果有人能为我提供一些帮助,我将不胜感激。
谢谢
最佳答案
不要相信任何关于性能的事情。
唯一重要的是现实。
在现实中,JIT 通常会颠覆您的微观优化尝试。
意思是:在你看到真正的问题之前不要担心性能(太多)。如果您遇到问题,请开始测量而不是做出假设。
相反:专注于良好、简洁的设计;按照SOLID原则;并编写干净、可读、可维护的代码。与担心这些微妙之处相比,这样做的代价要高出一百倍。
( 举个例子:返回 String 的方法 getType()
看起来已经是一个破烂的设计了。考虑过使用枚举吗?或者更奇怪: 你是否意识到仅通过使用不同的类,你的对象就有不同的类型?)
如果您仍然认为应该研究性能,那么请先阅读有关 JIT 的内容、它的工作原理、它的作用等等。
关于java - "Bridging"远程类之间的(连接)方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36695599/