类无法实例化

本文作者分享了自己在编程过程中遇到的两个典型错误:一是忘记为公共类添加访问修饰符,导致类无法在其他地方实例化;二是混淆了基本类型 int 与可空类型 int? 的比较,这两个错误对于初学者来说具有一定的警示意义。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天早上犯了几个低级的错误,在此标记,警告自己。

1.写了个公共类里面放一些常用的方法,但是忘记了给类添加访问修饰符。导致该类在别处无法实例化。

2.由于“int” 类型的值永不等于“int?”类型的“null” ,该表达式的结果始终为“false”。我竟然犯这种低级的错误。

### Java 插件实例化抽象错误解决方案 在Java中,抽象不能被直接实例化。如果尝试创建一个抽象的对象,则会抛出编译错误。对于插件架构中的情况,通常的做法是通过具体子来扩展抽象并提供具体的实现。 为了处理这种情况,在设计插件系统时可以考虑以下几种方法: #### 使用工厂模式 一种常见的做法是在插件内部定义一个工厂或者静态方法用于返回实现了特定接口的具体实例而不是试图直接实例化抽象基[^1]。 ```java public abstract class AbstractPlugin { protected String name; public static AbstractPlugin createInstance(String type){ switch(type.toLowerCase()){ case "typea": return new ConcretePluginA(); case "typeb": return new ConcretePluginB(); default: throw new IllegalArgumentException("Unknown plugin type"); } } // Other common methods... } // Specific implementations of the abstract class. class ConcretePluginA extends AbstractPlugin{ @Override public void doSomething(){ System.out.println("Concrete A doing something..."); } } ``` #### 利用反射机制 当使用`Class.forName()`加载外部JAR文件内的时,可以通过反射获取到该的构造函数,并传入必要的参数完成初始化过程。需要注意的是,这里仍然需要确保所要实例化是一个完整的非抽象[^2]。 ```java String className = "com.example.MyConcretePlugin"; try { Class<?> clazz = Class.forName(className); Constructor<?> constructor = clazz.getConstructor(); Object instance = constructor.newInstance(); } catch (Exception e) { logger.error(e.getMessage(), e); } ``` #### 结合Spring框架特性 如果是基于Spring的应用程序开发环境下的插件体系结构,那么还可以利用依赖注入容器自动管理Bean生命周期的功能简化这一流程。例如配置bean扫描路径让spring自行发现组件[@ComponentScan], 或者采用编程方式注册beans[@Bean][^3]. 以上三种策略都可以有效地绕过直接实例化抽象所带来的问题,同时也保持了良好的面向对象设计理念以及系统的灵活性和可维护性.
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值