当非私有方法的参数属于私有类型(例如,私有嵌套类)时,g ++和javac都不会发出警告。客户端不能使用此类方法,但它们可以作为类的公共API的一部分出现。
在C ++中,例如,将这些方法放入类Foo的公共部分可能允许其他类访问这些方法而不明确地在类Foo中列为朋友(只要它们可以访问用作的类的私有类型)参数)。
但总的来说,如果没有明确地将这些方法设为私有,或者只是被忽略,那么风格会不好? (因为无论如何客户都不能使用它,有什么大不了的)
答案 0 :(得分:4)
这是允许的,可能是必需的。
虽然可能不允许您创建私有类型的变量;它可能是一个函数返回。这将允许数据在系统周围传输,而不会在没有理由持有对它的引用的系统部分中持久存在。
这个成语并不常见但是被允许。
答案 1 :(得分:3)
在风格上我必须想象将这些方法作为公共API的一部分将被视为坏风格。在使用库时,您是否真的希望看到在IDE的自动完成对话框中无法实际调用的方法?我不这么认为。
至于为什么没有编译器警告,在大多数(也许是所有?)面向对象语言(当然还有Java)中,用户定义的Object类型只是使用指针传递给方法。因此,不需要了解实际类型,以便将对一个的引用作为函数参数传递,只需知道有关指针的知识。就编译器而言,每个人都知道如何创建指针,因此没有理由说“你实际上不能在外部调用它”。至少你可以用值null
来调用它。