4

当非私有方法的参数是私有类型(例如私有嵌套类)时,g++ 和 javac 都不会发出警告。这些方法不能被客户端使用,但它们可以作为类的公共 API 的一部分出现。

例如,在 C++ 中,将此类方法放入类 Foo 的公共部分可以允许其他类访问这些方法,而无需在类 Foo 中明确列为朋友(只要它们可以访问用作参数的私有类型)。

但总的来说,不明确地将这些方法设为私有会是不好的风格,还是可以忽略?(既然客户无论如何都不能使用它,那有什么大不了的)

4

2 回答 2

4

这是允许的并且可能是必需的。

虽然您可能不允许创建私有类型的变量;它可能由函数返回。这将允许数据在系统周围传输,而不会在没有理由持有对它的引用的系统部分中持久存在。

这个成语不常见,但被允许。

于 2011-07-31T09:28:46.547 回答
3

从风格上讲,我不得不想象将这些方法作为公共 API 的一部分会被认为是不好的风格。在使用库时,您是否真的希望看到在 IDE 的自动完成对话框中弹出实际上无法调用的方法?我不这么认为。

至于为什么没有编译器警告,在大多数(也许全部?)面向对象语言(当然在 Java 中)中,用户定义的对象类型只是使用指针传递给方法。因此,无需了解实际类型即可将引用作为函数参数传递,只需了解指针即可。而且就编译器而言,每个人都知道如何创建指针,所以说“你实际上不能在外部调用它”是没有根据的。至少你可以用 的值来调用它null

于 2011-07-31T09:33:31.393 回答