我实现了一个接口。我在所有方法上使用@Override
,没有问题。除了一种方法。
我只为这个方法得到了错误,它没有真正覆盖超类型, 当我取出注释时,它会编译,但当然,导入界面的应用程序(由界面实现初始化 - maven + swing)有问题识别此方法(但不是所有其余的)。可能是什么原因?可能是因为返回类型很复杂? 好吧,我添加了更多信息: 接口:
package de.htw_berlin.f4.ai.kbe.kurznachrichten;
import java.util.Date;
import java.util.List;
import java.util.Set;
public interface ShortMessageService {
Long createMessage(String userName, String message, String topic);
Long respondToMessage(String userName, String message, Long predecessor);
void deleteMessage(String userName, Long messageId) throws AuthorizationException;
void createTopic(String userName, String topic);
Set<String> getTopics();
List<List<Message>> getMessageByTopic(String topic, Date since);
void createUser(String userName, String city);
void deleteUser(String userName);
Set<User> getUsers();
}
我确实有两个不同的类,即实现Message的MeinMessage。 infterface是包中的Message。 MeinMessage的实现导入包。但是我在这个接口的其他方法中遇到了这些父子类的问题,没有问题。
在实施中:
package de.htw_berlin.f4.ai.kbe.kurznachrichtenImpl;
import de.htw_berlin.f4.ai.kbe.kurznachrichten.*;
import de.htw_berlin.aStudent.model.*;
import de.htw_berlin.aStudent.repository.*;
import java.util.*;
import java.util.Set;
import de.htw_berlin.aStudent.repository.MeinAuthorizationException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
@Service("smsImpl")
public class ShortMessageServiceImpl implements ShortMessageService{
@Autowired
MeinUserRepository meinUserRepository;
@Autowired
MeinMessageRepository meinMessageRepository;
@Autowired
TopicRepository topicRepository;
public ShortMessageServiceImpl(){
}
@Override
@Transactional
public List<List<Message>> getMessageByTopic(String topic, Date since){
if(topic == null)
throw new NullPointerException("Given parameter can not point on NULL");
Topic refTopic = topicRepository.getTopicByString(topic);
if(refTopic == null)
throw new IllegalArgumentException("Topic does not exist");
List<MeinMessage> messagesOfTopic = new ArrayList(refTopic.getMessages());
List<List<Message>> result = new ArrayList<List<Message>>();
for(MeinMessage var : messagesOfTopic){ //for 1
if(var.isOrigin()){
List<Message> temp = new ArrayList<Message>();
temp.add(var);
result.add(temp);
}
else{
Long predecessor = var.getPredecessor();
for(List<Message> chain: result)
if(chain.get(0).getMessageId() == predecessor)
chain.add(var);
}
}
return result;
}
接口的所有其他方法都没有问题。 当我拿走它时,我得到:
java: cannot find symbol
symbol: method getMessageByTopic(java.lang.String,java.util.Date)
location: variable ms1 of type de.htw_berlin.f4.ai.kbe.kurznachrichten.ShortMessageService
它不可能是进口。 ShortMessageService的所有其他方法,我在ShortMessageServiceImpl中使用@Override实现,我可以在App中没有问题的情况下运行。