【项目实战】 -- interface接口什么情况下可以被new?

在项目中,看别人代码,发现一种写法,如下:

	@Override
	public void execute(TaskContext ctx) {
		logger.info("开始历史消息归档任务");
		Date minTime = TimeUtil.minusDay(new Date(), keepMaxDay);

		LoopPageExecutor.execute(new LoopCall<UserMsgHistory>() {

			@Override
			public List<UserMsgHistory> getBatch(int batchSize) {
				List<UserMsgHistory> batchList = historyDao.queryExistSendTimeEalier(minTime, batchSize);
				logger.info("待归档批次数:" + batchList.size());
				return batchList;
			}

			@Override
			public void processPageData(List<UserMsgHistory> data) {
				List<ConcurrentCall<Boolean>> calls = new LinkedList<>();
				for (UserMsgHistory his : data) {
					calls.add(new MsgArchiveCall(his, minTime));

				}
				ConcurrentExecutor.execute(calls, 30);
			}

		}, 3000);

	}

其中的excute方法中,定义并new了一个接口LoopCall<UserEntity>,其中实现了两个方法getBatch()和processprocessPageSize()。

那么接口能够直接通过new来实例化吗?答案是不能,且抽象类也同此。接口、抽象类可以理解成是模糊不定的东西,要使用它的特质必须要实例化,实例化不能直接通过new,而是通过实现接口方法、继承抽象类等。如上述代码方式,不同于普通的实例化对象,Object o  = new Object(),而是通过new一个实现接口的匿名内部类LoopCall的方式,使用{}具体实现接口。

LoopCall接口定义如下:

	public interface LoopCall<T> {

		public List<T> getBatch(int batchSize);

		public void processPageData(List<T> data);
	}

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值