由于有C和c++的背景,我发现明智地使用typedef非常有帮助。您是否知道在Java中实现类似功能的方法,无论是Java机制、模式,还是您使用过的其他有效方法?
当前回答
正如其他人之前提到的, Java中没有类型定义机制。 一般来说,我也不支持“假职业”,但这里不应该有一个严格的一般经验法则: 例如,如果你的代码反复使用“基于泛型的类型”,例如:
Map<String, List<Integer>>
您绝对应该考虑为此目的创建一个子类。 另一种可以考虑的方法是,例如在你的代码中加入减速:
//@Alias Map<String, List<Integer>> NameToNumbers;
然后在代码中使用NameToNumbers,并有一个预编译器任务(ANT/Gradle/Maven)来处理和生成相关的java代码。 我知道对于这个答案的一些读者来说,这可能听起来很奇怪,但这就是JDK 5之前许多框架实现“注释”的方式,这就是lombok项目和其他框架正在做的事情。
其他回答
Java有基本类型,对象和数组,仅此而已。没有定义类型。
您可以使用Enum,尽管它在语义上与typedef略有不同,因为它只允许一组受限制的值。另一个可能的解决方案是命名包装器类,例如。
public class Apple {
public Apple(Integer i){this.i=i; }
}
但这似乎更笨拙,特别是考虑到从代码中无法清楚地看出类除了作为别名之外没有其他函数。
也许这是另一种可能的替代:
@Data
public class MyMap {
@Delegate //lombok
private HashMap<String, String> value;
}
在某些情况下,绑定注释可能正是你想要的:
https://github.com/google/guice/wiki/BindingAnnotations
或者,如果您不想依赖于Guice,那么使用常规注释就可以了。
在java 1.6中没有类型定义,你能做的是为你想要的做一个包装类,因为你不能子类化最终类(Integer, Double等)