java内部类的构造函数,关于Java:私有内部类的构造函数是否也私有

我正在重构一个越来越大的android项目。 运行棉绒使我在外部和内部类之间都能获得JSME问题的私有成员访问权限。 考虑以下示例

public class Outer {

private Inner mInner = new Inner();

private class Inner {}

}

我知道了

Name

privatefieldInnermInner

Location

classOuter (default package)

Problem synopsis

Access to private member of class 'Inner' at line 2

Problem resolution

Make 'Inner' constructor package-local

应用问题解决方案将源更改为

public class Outer {

private Inner mInner = new Inner();

private class Inner {

Inner() {}

}

}

我现在有点困惑。 到目前为止,我认为该示例将等效于

public class Outer {

private Inner mInner = new Inner();

private class Inner {

public Inner() {}

}

}

我在这种情况下错了吗?还是皮棉问题?

当类被声明为包私有时,是否应该声明一个公共构造函数?

每当您将某个类声明为私有时,属于该类的所有内容都将变为私有

@ cricket_007可悲的是没有。 它不包括皮棉抱怨的部分。

那我不太明白这个问题。 因为类本身是private,所以具有public构造函数与程序包级别(无访问修饰符)的构造函数并不重要。 例如。 Outer之外的任何类都不能访问Outer.Inner。 皮棉消息似乎是在说,没有比private约束少的构造函数,您不能说new Inner()

看看这个答案。 stackoverflow.com/a/15287730/2308683

您的理解是错误的,但是关于linter的问题还不是特别清楚,并且该建议可能与Android(不是J2ME)无关。

正如David解释的那样,内部类的隐式默认构造函数具有与类本身相同的访问修饰符,但是私有成员可以在同一编译单元(Java文件)中访问。没有语言上的理由来避免使用私有构造函数。

但是,在内部,由于将类编译为单独的输出文件,因此编译器必须创建合成适配器方法,以提供对私有成员的类访问权限。这些方法的运行时缺点与台式机应用程序无关,但是对于局限在J2ME上的东西,可以通过直接访问成员(使用程序包作用域)来消除这种差异。

Android对类文件执行大量的后处理,Android设备的约束程度不如J2ME设备。除非您要针对这两个平台编写代码,否则我将更改lint配置。

Java语言规范的第8.8.9节"默认构造函数"说:

In a class type, if the class is declared public, then the default

constructor is implicitly given the access modifier public (§6.6); if

the class is declared protected, then the default constructor is

implicitly given the access modifier protected (§6.6); if the class is

declared private, then the default constructor is implicitly given the

access modifier private (§6.6); otherwise, the default constructor has

the default access implied by no access modifier.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值