我正在尝试使用泛型实现堆栈。
以下是我所拥有的组件,
1)接口:
public interface stackInterface<T>{...}
2)实现:
public class Stack<T> implements stackInterface<T>{...}
3)客户端:
stackInterface<Integer> s=new Stack<Integer>();
我只是想知道我在做什么是正确的做法,还是我错过了什么?
答案 0 :(得分:4)
看起来很好。当然,除了完全错误的命名约定外。
Java中的类型名称使用CamelCase。与类相比,接口也没有特别命名。 Java中通常的方法是命名接口Stack<T>
和类ImplementationDetailStack<T>
,参见。 List<T>
和ArrayList<T>
或LinkedList<T>
。
(我个人赞成使用I
启动接口名称的.NET约定,例如接口为IStack
,默认实现为Stack
。)
答案 1 :(得分:2)
到目前为止,非常好,除了使用CamelCase命名所有类型,并且不在界面中使用“interface”一词。应该调用接口Stack
和实现...Stack
,其中...
描述基本实现原则,如ArrayList
。
通常我们倾向于为接口保留最好和最短的名称,因为它们出现在方法签名和变量类型的任何地方,而具体的实现类型只出现在实例化表达式中。
答案 2 :(得分:1)
stackInterface存在命名java转换的问题。它应该是StackInterface。
Java Naming conversion是一种很好的编码习惯。
接口:名称应该在CamelCase中。
价:HTTP://java.about.com/od/javasyntax/a/nameconventions.htm http://www.javapractices.com/topic/TopicAction.do?Id=58
答案 3 :(得分:1)
一个好主意可能是查看java.util.List
接口的源代码,其java.util.ArrayList
之类的实现classe正在使用泛型。您可以从那里学习并应用于您的代码。
答案 4 :(得分:0)
除了命名约定外,一切都很好。正如Dan所建议的那样,采取了List和ArrayList。最好在接口中只使用接口名称,并在接口名称后附加Impl作为默认实现。
public interface Stack <T> {
}
public class StackImpl<T> implements Stack {
}
Stack<String> defaultStack=new StackImpl<String>();
对于其他实现,最好使用List-ArrayList样式约定。