implement class or import class java
在内部,Java是更好的,或者是最优的,还是标准的:用常量或使用点标记实现一个类?
例子:
选项1:
1 2 3 4 5 6 7
| import com.myproject.Constantes;
public class myClass {
myClass () {
System. out. println("Math:" + Constantes. PI);
}
} |
选项2:
1 2 3 4 5 6 7 8
| import com.myproject.Constantes;
public class myClass implements Constantes {
myClass () {
System. out. println("Math:" + PI );
}
} |
号
哪个更好,为什么?MVJ的使用,资源,速度?
- programmers.stackexchange.com/questions/49572/…
- 一个也不是两个。我不喜欢这两种解决方案。有了这个,您就可以直接依赖于这个常量类了。将常量放到它们属于技术/功能的类中
- 运行时没有区别。
- @很难控制,看起来那个班真的需要那个圆周率。那么,你将如何消除对你的3的依赖?
- 静态导入在几个方面都是最佳的。
- 实现一个接口以获取对常量的访问称为常量接口反模式。"反模式"这个名字表明这是一种不好的做法。
- @在这个简单的示例中,我将以值的形式传递常量。我考虑过你的问题,是的,我的回答太简单了。但直到现在,我都记不起我应该在哪里上一门很好的恒流课。
- @restive math.pi,或developer.android.com/reference/android/r.html等等;)。你是对的,只是太笼统了一点。
- @RP,这是有争议的。它们在运行时没有优势,在编译时没有实际的优势(稍微缩短代码),它们使得很难找到常量所属的位置,并且根据LuigiedLCarno的答案,它们引入了一些微妙的问题。
- @full.stack.ex类Math是一个围绕数学运算的实用程序类。所以我的论点"常量应该由它们的技术/函数类拥有"仍然适用。Swing API的类JFrame是另一个例子。作为对应项,您可以输入org.eclipse.swt.swt或您的android r类。所以我认为这主要是个人的决定,而我就像"大常数只有课程设计不好"。
如果Constantes纯粹是常量的集合(顾名思义),并且没有定义您需要在myClass中公开的功能,那么a)它不应该是interface,b)您不应该实现/扩展它。导入并使用它,如选项1所示。
- 实际上,我发现了一个只有常量变化的接口。不属于任何结构,不属于任何方法,只属于变量。就像抽屉里的灾难。我发现了一个实现该接口的类,但它的代码"constantes.name_constant"重复了100多次,我认为"更好地实现和替换所有重复的代码(constantes.name_constant)和不重复的代码(name_constant)"。
- @用户1782602:这是你的决定。我不会,我会把Constantes.name_constant的用法留在代码中。一方面,它很好也很清楚,而且它并没有说类实现了一些它没有真正实现的东西。就JVM而言,我不认为它以这种或那种方式关心。
- 理解,必须尊重模型并充分利用类层次结构。这是误用,我同意你的做法。非常感谢你!
我认为应该使用选项1来避免错误地使用当前类中内部定义的另一个PI。
应该使用选项1,因为这将定义使用导入类中定义的常量。
如果在myclass中有一个名为pi的局部变量,选项2将使用该变量,而不是导入类中的变量。
通常,清晰度比性能更重要,这也不例外。
选项1优先于选项2,因为后者意味着myClass是一个Constantes,这没有意义。
自Java 5以来,你还有一个更好的选择。
1 2 3 4 5 6 7 8 9
| import static com. myproject. Constantes. PI;
// OR
import static com. myproject. Constantes. *;
public class MyClass {
MyClass (){
System. out. println("Math:" + PI );
}
} |
- 谢谢您!我已经完成了一个1.4项目:(恐怕我不能改变它,但我也在另一个1.5项目中尝试应用它,我不知道这是可以做到的。
- Java 6的公共更新的结束已经扩展到FEB 2013,它毫无价值。如果你有机会更新,我会认真考虑Java 7而不是Java 5。
implements(接口,而不是类)表示myClass必须遵守Constantes指定的合同(通常带有一些必须在类中实现的方法规范)。
请检查面向对象编程(programaci_n orientada a objetos)概念,然后再了解任何给定语言的特殊性。
- 实际上,我发现了一个只有常量变化的接口。不属于任何结构,不属于任何方法,只属于变量。就像抽屉里的灾难。我发现了一个实现该接口的类,但它的代码"constantes.name_constant"重复了100多次,我认为"更好地实现和替换所有重复的代码(constantes.name_constant)和不重复的代码(name_constant)"。
- 好吧,我误解了你的问题。那么彼得·劳里的回答应该是正确的,就这样做吧。
- 不,你的回答是正确的。我完全理解并尝试应用它。我正在努力逐步改进这个项目,谢谢!:)
你在这里做了两件不同的事情。在第一个片段中,您只是编写引用Constantes类/接口中的内容的代码,因此需要使用import,而在第二个片段中,您声明您的代码必须符合Constantes接口,即实现其中的任何和所有方法。
干杯,