私人子课......这是件坏事吗?

时间:2011-12-01 23:04:41

标签: java coding-style

所以我认为自己是一名初级java / android开发人员

我总是遇到这些,但从来没有真正喜欢过它们并将它们称为脏代码

class herp{
 private class derp extends OnclickListener{
 ...
 }
 private class gerp AsyncTask{
 ...
 }
}

我应该尽量避免这些吗?甚至确保我从不使用这些?

4 个答案:

答案 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();
}