由于有C和c++的背景,我发现明智地使用typedef非常有帮助。您是否知道在Java中实现类似功能的方法,无论是Java机制、模式,还是您使用过的其他有效方法?
当前回答
Java有基本类型,对象和数组,仅此而已。没有定义类型。
其他回答
在某些情况下,绑定注释可能正是你想要的:
https://github.com/google/guice/wiki/BindingAnnotations
或者,如果您不想依赖于Guice,那么使用常规注释就可以了。
正如其他回答中提到的,应该避免使用伪类型定义反模式。然而,typedef仍然是有用的,即使这不是实现它们的方法。您希望区分具有相同Java表示的不同抽象类型。你不希望混淆密码字符串和街道地址字符串,或者表示偏移量的整数和表示绝对值的整数。
检查器框架允许您以向后兼容的方式定义类型定义。I甚至适用于基本类,如int和final类,如String。它没有运行时开销,也不会破坏相等性测试。
检查器框架手册中的类型别名和类型defs描述了几种创建类型defs的方法,具体取决于您的需要。
Java有基本类型,对象和数组,仅此而已。没有定义类型。
在Java中不需要类型定义。除了原语外,所有东西都是Object。没有指针,只有引用。通常使用typedef的场景是创建对象的实例。
正如其他人之前提到的, Java中没有类型定义机制。 一般来说,我也不支持“假职业”,但这里不应该有一个严格的一般经验法则: 例如,如果你的代码反复使用“基于泛型的类型”,例如:
Map<String, List<Integer>>
您绝对应该考虑为此目的创建一个子类。 另一种可以考虑的方法是,例如在你的代码中加入减速:
//@Alias Map<String, List<Integer>> NameToNumbers;
然后在代码中使用NameToNumbers,并有一个预编译器任务(ANT/Gradle/Maven)来处理和生成相关的java代码。 我知道对于这个答案的一些读者来说,这可能听起来很奇怪,但这就是JDK 5之前许多框架实现“注释”的方式,这就是lombok项目和其他框架正在做的事情。
推荐文章
- codestyle;把javadoc放在注释之前还是之后?
- 如何在Spring中定义List bean ?
- 将Set<T>转换为List<T>的最简洁的方法
- 在JavaScript中,什么相当于Java的Thread.sleep() ?
- 使用Java重命名文件
- URL从Java中的类路径加载资源
- c++中size_t和int的区别是什么?
- .toArray(new MyClass[0]) or .toArray(new MyClass[myList.size()])?
- Hibernate中不同的保存方法之间有什么区别?
- 在C和c++中静态变量存储在哪里?
- Java 8流和数组操作
- Java Regex捕获组
- Openssl不被视为内部或外部命令
- 如何添加自定义方法到Spring Data JPA
- 为什么标准迭代器范围是[begin, end]而不是[begin, end]?