由于有C和c++的背景,我发现明智地使用typedef非常有帮助。您是否知道在Java中实现类似功能的方法,无论是Java机制、模式,还是您使用过的其他有效方法?
当前回答
正如其他回答中提到的,应该避免使用伪类型定义反模式。然而,typedef仍然是有用的,即使这不是实现它们的方法。您希望区分具有相同Java表示的不同抽象类型。你不希望混淆密码字符串和街道地址字符串,或者表示偏移量的整数和表示绝对值的整数。
检查器框架允许您以向后兼容的方式定义类型定义。I甚至适用于基本类,如int和final类,如String。它没有运行时开销,也不会破坏相等性测试。
检查器框架手册中的类型别名和类型defs描述了几种创建类型defs的方法,具体取决于您的需要。
其他回答
Java有基本类型,对象和数组,仅此而已。没有定义类型。
您可以使用Enum,尽管它在语义上与typedef略有不同,因为它只允许一组受限制的值。另一个可能的解决方案是命名包装器类,例如。
public class Apple {
public Apple(Integer i){this.i=i; }
}
但这似乎更笨拙,特别是考虑到从代码中无法清楚地看出类除了作为别名之外没有其他函数。
也许这是另一种可能的替代:
@Data
public class MyMap {
@Delegate //lombok
private HashMap<String, String> value;
}
如果这是你的意思,你可以简单地扩展你想要typedef的类,例如:
public class MyMap extends HashMap<String, String> {}
在Java中不需要类型定义。除了原语外,所有东西都是Object。没有指针,只有引用。通常使用typedef的场景是创建对象的实例。
推荐文章
- 指定的子节点已经有一个父节点。你必须先在子对象的父对象上调用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的构造函数的目的是什么?