能不能自己写个类,也叫 java.lang.String?

本文探讨了在Java中创建自定义的java.lang.String类的可能性及其限制。文章解释了类加载器如何影响类的加载过程,并指出使用自定义java.lang.String类可能会导致的问题。

能不能自己写个类,也叫 java.lang.String?

标签: String
  587人阅读  评论(0)  收藏  举报
  分类:
可以,但在应用的时候,需要用自己的类加载器去加载,否则,系统的类加载器永远只是去
加载 jre.jar 包中的那个 java.lang.String。由于在 tomcat 的 web 应用程序中,都是由 webapp
自己的类加载器先自己加载 WEB-INF/classess 目录中的类,然后才委托上级的类加载器加
载,如果我们在 tomcat 的 web 应用程序中写一个 java.lang.String,这时候 Servlet 程序加
载的就是我们自己写的 java.lang.String,但是这么干就会出很多潜在的问题,原来所有用
了 java.lang.String 类的都将出现问题。
虽然 java 提供了 endorsed 技术,可以覆盖 jdk 中的某些类,具体做法是….。但是,能够
被覆盖的类是有限制范围,反正不包括 java.lang 这样的包中的类。


public class String {
public static void main(String[] args) {
System.out.println("Stirng");
}
}


报错如下:

错误: 在类 a_StringTest.String 中找不到主方法, 请将主方法定义为:
   public static void main(String[] args)

由于提供的引用内容未涉及“Constructor auto - mapping失败,构造函数参数数量与结果集列数不匹配问题”的解决方案,下面是通用的解决思路: ### 调整构造函数 修改的构造函数,使其参数数量与结果集列数相匹配。可以移除不必要的参数,或者添加默认值。 ```java public class YourClass { // 假设之前有44个参数 // 现在调整为30个参数,和结果集列数匹配 public YourClass( String param1, String param2, /* ... 共30个参数 ... */ String param30 ) { // 构造函数逻辑 } } ``` ### 使用部分映射 仅映射结果集中存在的列,对于构造函数中多余的参数,可以在创建对象后手动设置。 ```java // 假设使用MyBatis <resultMap id="PartialMapping" type="YourClass"> <constructor> <arg column="column1" javaType="String"/> <arg column="column2" javaType="String"/> <!-- ... 共30个参数映射 ... --> <arg column="column30" javaType="String"/> </constructor> </resultMap> ``` 然后在代码中手动设置其余参数: ```java YourClass yourObject = yourMapper.selectOne(); // 手动设置其余参数 yourObject.setExtraParam(someValue); ``` ### 自定义映射逻辑 可以自定义映射逻辑,通过编代码来处理结果集,手动创建对象并设置属性。 ```java // 假设使用JDBC ResultSet rs = statement.executeQuery("SELECT * FROM your_table"); while (rs.next()) { // 手动创建对象并设置属性 YourClass yourObject = new YourClass( rs.getString("column1"), rs.getString("column2"), // ... 共30个属性设置 ... rs.getString("column30") ); // 手动设置其余参数 yourObject.setExtraParam(someValue); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值