所以我认为自己是一名初级java / android开发人员
我总是遇到这些,但从来没有真正喜欢过它们并将它们称为脏代码
class herp{
private class derp extends OnclickListener{
...
}
private class gerp AsyncTask{
...
}
}
我应该尽量避免这些吗?甚至确保我从不使用这些?
答案 0 :(得分:4)
什么是脏代码是非常主观的。
可以说嵌套类非常有用。通常他们不需要像那样嵌套,因为他们很可能很容易成为匿名类。
这个想法是:你希望尽可能少的其他课程来访问你的小课程。你不想制作自己的包,因为你真的属于你已经拥有的包。相反,你创建了一个私有类。现在只有你可以使用它,这很好,因为它是专为你的班级量身定做的。
现在,您将拥有多少derp
个实例?你可能有一个机会。所以不要这样做,我会这样做:
OnClickListener derp = new OnClickListener() {
// fill in methods to override here
}
它基本上做同样的事情,但我不能重复使用这个类,这很好 - 没有人应该重复使用一次性类!
答案 1 :(得分:1)
什么是清洁代码通常是基于经验的个人偏好。无论如何,嵌套类并不是混乱,但是你应该确定它是适当的情况。
如果您迫切需要某个类的某些特定功能,这些功能扩展了问题中的OnClickListener,那么问题是您需要多少次这个类?如果答案是一次,那么匿名类将是一个更清洁的解决方案。如果答案是在类中的每个方法中,那么嵌套类显然更有意义。
Java中的每个功能或多或少都有一个被认为合适的时间和地点。对于满足两个条件的情况,应该在我的脑海中保留私有嵌套类,例如你问题中的那些类:
a)你必须有一个单独的类,只在这个类中使用,而不是在其他地方使用
和
b)您需要在班级的多个位置使用该课程。
在一天结束时,嵌套的私有类本身并不脏或难以维护,但与编程语言的任何其他功能一样,请确保您需要它们。
答案 2 :(得分:0)
这个问题没有固定答案。它主要归结为您自己的编码风格,偏好以及您团队的编码惯例。
私有内部类有很多原因。您可以使用它们来提供接口的实现(例如,List
实现可以将其自己的Iterator
实现定义为私有内部类),而无需使具体类可见。它保护了实现,并允许您向API /类的用户提供足够的详细信息,以便他可以正确使用它,而不会使用无用的详细信息(您的具体类)混乱您的文档。
您也可以使用私有内部类作为侦听器的实现,即使有些人可能不同意这种理念。当侦听器有一些复杂的逻辑时,我更喜欢将私有内部类用于匿名类。
您可能还想将它们用于将代码逻辑分离到单独的类中,但不希望将这些类暴露在外部类之外。
请记住,使用私有内部类的每个解决方案也可以在不使用它们的情况下实现。就像生活中的许多事情一样,使用私人内部课程本身并不是一种坏习惯,但滥用是一种不好的做法。
答案 3 :(得分:0)
没关系。您可以考虑将它们设为static
内部类,否则您需要herp
的实例来创建一个(尽管这可能是您想要的):
class herp {
private static class derp extends OnclickListener{
...
}
private static class gerp AsyncTask{
...
}
}
证明的区别是:
public static void main(String[] args) {
// With static:
new derp();
// Without static:
new herp().new derp();
}