写在最后
对程序员来说,很多技术的学习都是“防御性”的。也就是说,我们是在为未来学习。我们学习新技术的目的,或是为了在新项目中应用,或仅仅是为了将来的面试。但不管怎样,一定不能“止步不前”,不能荒废掉。
![
文章以下内容会给出阿里与美团的面试题(答案+解析)、面试题库、Java核心知识点梳理等
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
- 方法重载,每个类型要进行方法的重载
比如下面这段代码,使用枚举是很推荐的:
public enum UnitConverter{
METERS{
@Override
public double toMiles(final double meters){
return meters * 0.00062137D;
}
@Override
public double toMeters(final double meters){
return meters;
}
},
MILES{
@Override
public double toMiles(final double miles){
return miles;
}
@Override
public double toMeters(final double miles){
return miles / 0.00062137D;
}
};
public abstract double toMiles(double unit);
public abstract double toMeters(double unit);
}
不推荐的情况:
-
你的函数可以接受一种类型所有的值,而你所列出来的只是这些值里面比较重要的值
-
你的函数可以接受连续的数据
-
用于名称
-
other…
=================================================================================
既然使用枚举是因为参数的类型太泛了造成的类型不安全,那么我只要将参数限定在某一个类型集合里面
要将的@IntDef
/@StringDef
+ @interface
来进行限定参数
build.gradle 文件中添加依赖
dependencies {
compileOnly ‘com.android.support:support-annotations:25.1.0’
}
也可以使用对应的版本 compileOnly 是不会让 support-annotations 到下一个依赖库,如果想让下一个库依赖,请使用 api
特别的,如果是 app 出包,依赖必须使用 implementation
然后就可以使用注解帮助检查参数,代码如下
public class SexTest {
public final int MAN = 2;
public final int WOMEN = 3;
/**
- 只能使用 {@link #MAN} {@link #WOMEN}
*/
@Documented // 表示开启Doc文档
@IntDef({
MAN,
WOMEN,
}) //限定为MAN,WOMEN
@Target({
ElementType.PARAMETER,
ElementType.FIELD,
ElementType.METHOD,
}) //表示注解作用范围,参数注解,成员注解,方法注解
@Retention(RetentionPolicy.SOURCE) //表示注解所存活的时间,在运行时,而不会存在 .class 文件中
public @interface Sex { //接口,定义新的注解类型
}
public void setSex(@Sex int sex){
this.sex = sex;
}
}
如果我们尝试在调用setSex()方法的时候,传入不在限定之内的值,那么编译就不会通过,有错误提示
同理,我们也可以使用@StringDef
public class FlagContants {
public static final String UNDEFINE = “undefine”;
public static final String OK = “ok”;
public static final String ERROR = “error”;
private @FlagDef
String flag = UNDEFINE;
@Documented // 表示开启Doc文档
@StringDef({
OK,
ERROR
}) //限定为 FlagContants.OK, FlagContants.ERROR
@Target({
ElementType.PARAMETER,
ElementType.FIELD,
ElementType.METHOD,
}) //表示注解作用范围,参数注解,成员注解,方法注解
@Retention(RetentionPolicy.SOURCE) //表示注解所存活的时间,在运行时,而不会存在 .class 文件中
public @interface FlagDef { //接口,定义新的注解类型
}
public @FlagDef
String getFlag() {
return flag;
}
public void setFlag(@FlagDef String flag) {
this.flag = flag;
}
}
============================================================================================
自动模板,用于快速生产这种枚举类(智能模板不包括引包,引入包请手动,或者配置自动引入)
-
分组
Android
-
名称 Abbreviation
defInt
-
描述 Description
add Android IntDef Source block
-
Template text
@IntDef({
E N D END END
})
@Documented
@Target({
ElementType.FIELD,
ElementType.METHOD,
ElementType.PARAMETER,
})
@Retention(RetentionPolicy.SOURCE)
public @interface I n t D e f N a m e IntDefName IntDefNameDef {
}
【延伸Android必备知识点】
【Android部分高级架构视频学习资源】
**Android精讲视频学习后更加是如虎添翼!**进军BATJ大厂等(备战)!现在都说互联网寒冬,其实无非就是你上错了车,且穿的少(技能),要是你上对车,自身技术能力够强,公司换掉的代价大,怎么可能会被裁掉,都是淘汰末端的业务Curd而已!现如今市场上初级程序员泛滥,这套教程针对Android开发工程师1-6年的人员、正处于瓶颈期,想要年后突破自己涨薪的,进阶Android中高级、架构师对你更是如鱼得水!
**任何市场都是优胜略汰适者生存,只要你技术过硬,到哪里都不存在饱和不饱和的问题,所以重要的还是提升自己。懂得多是自己的加分项 而不是必须项。门槛高了只能证明这个市场在不断成熟化!**另外一千个读者就有一千个哈姆雷特,所以以上只是自己的关键,不喜勿喷!
如果你是卡在缺少学习资源的瓶颈上,那么刚刚好我能帮到你。欢迎关注会持续更新和分享的。
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
己的加分项 而不是必须项。门槛高了只能证明这个市场在不断成熟化!**另外一千个读者就有一千个哈姆雷特,所以以上只是自己的关键,不喜勿喷!
如果你是卡在缺少学习资源的瓶颈上,那么刚刚好我能帮到你。欢迎关注会持续更新和分享的。
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!