由于有C和c++的背景,我发现明智地使用typedef非常有帮助。您是否知道在Java中实现类似功能的方法,无论是Java机制、模式,还是您使用过的其他有效方法?
当前回答
也许这是另一种可能的替代:
@Data
public class MyMap {
@Delegate //lombok
private HashMap<String, String> value;
}
其他回答
Java有基本类型,对象和数组,仅此而已。没有定义类型。
正如其他人之前提到的, Java中没有类型定义机制。 一般来说,我也不支持“假职业”,但这里不应该有一个严格的一般经验法则: 例如,如果你的代码反复使用“基于泛型的类型”,例如:
Map<String, List<Integer>>
您绝对应该考虑为此目的创建一个子类。 另一种可以考虑的方法是,例如在你的代码中加入减速:
//@Alias Map<String, List<Integer>> NameToNumbers;
然后在代码中使用NameToNumbers,并有一个预编译器任务(ANT/Gradle/Maven)来处理和生成相关的java代码。 我知道对于这个答案的一些读者来说,这可能听起来很奇怪,但这就是JDK 5之前许多框架实现“注释”的方式,这就是lombok项目和其他框架正在做的事情。
在java 1.6中没有类型定义,你能做的是为你想要的做一个包装类,因为你不能子类化最终类(Integer, Double等)
Kotlin支持类型别名https://kotlinlang.org/docs/reference/type-aliases.html。可以重命名类型和函数类型。
Typedef允许将项隐式分配给它们不是的类型。有些人试图通过扩展来解决这个问题;请阅读IBM关于为什么这是一个坏主意的解释。
编辑:虽然强类型推断是一个有用的东西,但我不认为(希望我们不会)看到typedef在托管语言中出现它丑陋的头(永远不会?)
编辑2:在c#中,你可以在源文件的顶部使用这样的using语句。这样你就不用做第二项了。只有在作用域引入两个类型之间的名称冲突时才会看到名称更改。重命名仅限于一个文件,除此之外,使用它的每个变量/参数类型都知道其全名。
using Path = System.IO.Path;
using System.IO;
推荐文章
- 指定的子节点已经有一个父节点。你必须先在子对象的父对象上调用removeView() (Android)
- 未定义对静态constexpr char的引用[]
- 对于一个布尔字段,它的getter/setter的命名约定是什么?
- 如何获得当前屏幕方向?
- 如何在Android中渲染PDF文件
- 在c++中,restrict关键字是什么意思?
- 如何创建可变参数宏(参数数量可变)
- 如何计算一个元素在列表中出现的次数
- c++中类似于java的instanceof
- 我如何解决错误“minCompileSdk(31)指定在一个依赖的AAR元数据”在本机Java或Kotlin?
- 如何POST表单数据与Spring RestTemplate?
- include_directories和target_include_directories在CMake中的区别是什么?
- Mockito中检测到未完成的存根
- 我应该如何复制字符串在Java?
- std::make_pair与std::pair的构造函数的目的是什么?