'TenantId(java.lang.String)' has private access in 'com.dxc.mongodb.TenantId'
来源:互联网 发布:复权价格 知乎 编辑:程序博客网 时间:2024/05/17 23:00
如下图:
分析错误提示
从代码提示中可以看出,在TenantId类中,由于TenantId构造函数是私有的,所以在外面不能访问此构造函数
代码例子:
test.java
package com.yubai.sample.repository;public class test { public static void main(String[] args) { Book b = new Book("java"); System.out.println(b.getName()); }}
此时 Book b = new Book(“java”);就会报错’Book(java.lang.String)’ has private access in ‘com.yubai.sample.repository.Book’
Book.java
package com.yubai.sample.repository;public class Book { private String name; private Book(String name) { this.name = name; } public String getName() { return name; }}
分析代码关于访问私有属性的方法
从Book.java代码可以看出:
1. name属性的值无法访问,因为对象无法创建,有参构造函数是private无法创建对象,而Book.java中也没有提供无参构造函数,所以无法创建对象,那么无法访问getName()方法,从而无法获得name属性的值。
2. 一般在非私有构造函数的情况下,如果想修改私有属性,是通过setName()
3. 如果想访问name属性的值,又不想被外界通过setXXX()方法改变name属性的值,那么只能在内部类中设置好name的初始值,并且把它设为私有的,外部不能修改的,解决办法如下两种(目前我能想到的)。
解决办法:
第一种:
首先初始化属性值:通过在类内部调用私有构造函数创建(构造函数私有,外部将无法创建对象,也就是无法调用私有构造函数,那么将无法修改name属性的值)
设置属性为全局变量:设置属性为public static final,因为可以在外部import类名.属性名后,可以直接使用属性名。如下代码:
package com.yubai.sample.repository;public class Book { private String name; public static final Book BOOK = new Book("java"); private Book(String name) { this.name = name; } public String getName() { return name; } @Override public String toString() { return BOOK.name; }}
test.java
package com.yubai.sample.repository;import static com.yubai.sample.repository.Book.BOOK;public class test { public static void main(String[] args) { System.out.println(BOOK); }}
第二种:初始化属性值,仅提供getName()方法。
package com.yubai.sample.repository;public class Book { private String name = "aaa"; public String getName() { return name; }}
test.java
package com.yubai.sample.repository;import static com.yubai.sample.repository.Book.BOOK;public class test { public static void main(String[] args) { Book book = new Book(); System.out.println(book.getName()); }}
相比较第一种方法,我觉得第一种更方便对于获取name属性的值。因为第一种方法只要引入import static com.yubai.sample.repository.Book.BOOK; 就可以直接运用BOOK属性。而第二种方法要想获得name属性的值,需要通过String name= book.getName();语句来获得,相对比较繁琐。 根据不同的需求运用不同的方法。
分析代码关于static final 属性外部怎么直接使用
如果要使用static final的属性,则需要import static 包名.类名.属性,而不是import类名
代码如下:
test.java
package com.yubai.sample.repository;//import static com.yubai.sample.repository.Book.BOOK;import static com.yubai.sample.repository.Book;//报错。cannot resolve symbol 'BOOK'public class test { public static void main(String[] args) { System.out.println(BOOK);//报错。cannot resolve symbol 'BOOK' }}
当直接使用BOOK属性时,报错,应该导入注释掉的包
当导入的是类名,则使用BOOK属性的格式:Book.BOOK(类名.属性名)
显然直接使用BOOK属性较Book.BOOK方便。
如下导入的包是类名
package com.yubai.sample.repository;import static com.yubai.sample.repository.Book;public class test { public static void main(String[] args) { System.out.println(Book.BOOK); }}
分析代码关于不能访问方法,因为无法创建对象
代码块
Book.java
package com.yubai.sample.repository;public class Book { private String name; public static final Book BOOK = new Book("spring boot"); private Book(String name) { this.name = name; } public String getName() { return name; } }
test.java
package com.yubai.sample.repository;public class test { public static void main(String[] args) { Book b = new Book(); //报错:'Book(java.lang.String)' has private access... System.out.println(b.getName()); }}
此时Book b = new Book();会报错,因为Book.java中没有显示写无参构造函数, 当没有显示的写无参构造函数时,有参构造函数覆盖了默认的无参构造函数,所以不能用无参构造函数创建对象,没有对象将无法调用方法。
- 'TenantId(java.lang.String)' has private access in 'com.dxc.mongodb.TenantId'
- (求助)xx has privare access in 怎么解决
- Could not autowire field: private java.lang.Integer com.taotao.sso.service.impl.UserServiceImpl.SSO_
- Why String has been made immutable in Java?
- java.lang.IllegalAccessException:modifiers "private"
- com.google.gson.JsonSyntaxException: java.lang.NumberFormatException: For input string:
- java.lang.IllegalStateException: Illegal access: this web application instance has been stopped already.
- java.lang.IllegalStateException: Illegal access: this web application instance has been stopped
- java.lang.IllegalArgumentException: View=com.android.in...
- aop (java.lang.String)
- weblogic java.lang.String,long,java.lang.String) in weblogic.servlet.jsp.StaleChecker cannot be applied
- ResultCode() in ResultCode cannot be applied to (java.lang.String,java.lang.String)
- java.lang.ClassCastException: java.lang.String cannot be cast to com.qbz.entity.TblUser
- java.lang.UnsatisfiedLinkError: dlopen failed: /data/app/com.gkzxhn.prision-2/lib/arm/libosp.so: has
- java.lang.UnsatisfiedLinkError: dlopen failed: /data/app/com.smallvideo-1/lib/arm/libutility.so: has
- java.lang.NoSuchMethodError: com.opensymphony.xwork2.util.ValueStack.findValue(Ljava/lang/String;Lja
- Exception in thread "main" java.lang.ClassCastException: java.lang.String cannot be cast to java.lan
- HBASE: java.lang.IllegalAccessError: tried to access method com.google.common.base.Stopwatch.<init>
- SGML,XML,HTML5新技术
- jmeter 分布式部署
- %lf和%f到底该用哪一个
- 5-8 哈利·波特的考试(Floyd)
- sleep和wait
- 'TenantId(java.lang.String)' has private access in 'com.dxc.mongodb.TenantId'
- python中的re模块(正则表达式)
- Springmvc的注解
- 简易的温度计控件实现
- 三(2)、JSP九大内置对象——request(重要)
- 爬虫——多线程糗事百科案例
- NDK_APPLICATION_MK分析
- HDU5988(最小费用流)
- 太空飞行计划