由于有C和c++的背景,我发现明智地使用typedef非常有帮助。您是否知道在Java中实现类似功能的方法,无论是Java机制、模式,还是您使用过的其他有效方法?
当前回答
在Java中不需要类型定义。除了原语外,所有东西都是Object。没有指针,只有引用。通常使用typedef的场景是创建对象的实例。
其他回答
Typedef允许将项隐式分配给它们不是的类型。有些人试图通过扩展来解决这个问题;请阅读IBM关于为什么这是一个坏主意的解释。
编辑:虽然强类型推断是一个有用的东西,但我不认为(希望我们不会)看到typedef在托管语言中出现它丑陋的头(永远不会?)
编辑2:在c#中,你可以在源文件的顶部使用这样的using语句。这样你就不用做第二项了。只有在作用域引入两个类型之间的名称冲突时才会看到名称更改。重命名仅限于一个文件,除此之外,使用它的每个变量/参数类型都知道其全名。
using Path = System.IO.Path;
using System.IO;
Java有基本类型,对象和数组,仅此而已。没有定义类型。
Kotlin支持类型别名https://kotlinlang.org/docs/reference/type-aliases.html。可以重命名类型和函数类型。
您可以使用Enum,尽管它在语义上与typedef略有不同,因为它只允许一组受限制的值。另一个可能的解决方案是命名包装器类,例如。
public class Apple {
public Apple(Integer i){this.i=i; }
}
但这似乎更笨拙,特别是考虑到从代码中无法清楚地看出类除了作为别名之外没有其他函数。
正如其他人之前提到的, Java中没有类型定义机制。 一般来说,我也不支持“假职业”,但这里不应该有一个严格的一般经验法则: 例如,如果你的代码反复使用“基于泛型的类型”,例如:
Map<String, List<Integer>>
您绝对应该考虑为此目的创建一个子类。 另一种可以考虑的方法是,例如在你的代码中加入减速:
//@Alias Map<String, List<Integer>> NameToNumbers;
然后在代码中使用NameToNumbers,并有一个预编译器任务(ANT/Gradle/Maven)来处理和生成相关的java代码。 我知道对于这个答案的一些读者来说,这可能听起来很奇怪,但这就是JDK 5之前许多框架实现“注释”的方式,这就是lombok项目和其他框架正在做的事情。
推荐文章
- 在maven中安装mvn到底做什么
- 不可变与不可修改的集合
- 什么是“参数依赖查找”(又名ADL,或“Koenig查找”)?
- 如何在JSON中使用杰克逊更改字段名
- GSON -日期格式
- 如何从线程捕获异常
- 无法解析主机"<URL here>"没有与主机名关联的地址
- 公共朋友交换成员函数
- 如何在Java中打印二叉树图?
- String.format()在Java中格式化双重格式
- 如何将文件指针(file * fp)转换为文件描述符(int fd)?
- com.jcraft.jsch.JSchException: UnknownHostKey
- 如何在Go中使用c++
- Java中的操作符重载
- 如何向一个5岁的孩子解释依赖注入?