当前位置: 首页 > 知识库问答 >
问题:

Intellij无法解析方法,即使它是公共的(Java)

陶柏
2023-03-14

我在谷歌上搜索了很多次,使缓存无效,但我似乎找不到答案。作为背景,这是一个使用约束求解的时间表系统。我有一个名为periode的自定义类,它具有公共方法getstart()getend()。我还有一个抽象类constraint 和一个子类demavailconstratint 。在这个子类中(类似地在另一个子类中),无法解析periodedempermonor中的方法。

DemaVailConstraint中,当对this.period调用时,显示错误的方法是getstart()getend(),但当对其他periode对象调用时则不是。类似地,isavailable()setference()方法中对this.gettemplarmonor()调用时也会发生这种情况。这是演示器中的一个公共方法。你知道为什么会这样吗?

下面是这些类(为了清楚起见,删除了一些方法):

public abstract class Constraint<V, D> {
    private V variable;
    
    public Constraint(V variable) {
        this.variable = variable;
    }
    
    public abstract boolean satisfied();
    
    public abstract int score();
    
    protected V getVariable() {
        return this.variable;
    }
    
    protected void setVariable(V variable) {
        this.variable = variable;
    }
}
public class DemAvailConstraint<Demonstrator, Period> extends Constraint {
    private Period period;
    private ArrayList<AvailBlock> periodAsBlocks;
    
    public DemAvailConstraint(Demonstrator demonstrator, Period period) {
        super(demonstrator);
        this.period = period;
        periodAsBlocks = new ArrayList<>();
        periodAsBlocks.add( AvailBlock.from(this.period.getStart()) );
        while ( periodAsBlocks.get( periodAsBlocks.size() - 1 ).getEnd().isBefore(this.period.getEnd()) ) {
            periodAsBlocks.add( AvailBlock.from(periodAsBlocks.get( periodAsBlocks.size() - 1 ).getEnd()) );
        }
    }
    
    @Override
    public boolean satisfied() {
        // now we check if the demonstrator is available for each block
        for (AvailBlock block : this.periodAsBlocks) {
            if ( !this.getDemonstrator().isAvailable(block) ) return false;
        }
        return true;
    }
    
...
    
    public Demonstrator getDemonstrator() {
        return (Demonstrator) super.getVariable();
    }
}
public class Period {
    
    private String name;
    private LocalDateTime start;
    // duration in seconds
    private int duration;
    private Lecturer lecturer;
    private ArrayList<Demonstrator> dems;
    private ArrayList<Skill> skills;
    
    /**
     * Basic constructor. Use the factory method from() to make a period from AvailBlock objects.
     * @param name
     * @param start
     * @param duration
     * @param lecturer
     */
    public Period(String name, LocalDateTime start, int duration, Lecturer lecturer) {
        this.name = name;
        this.lecturer = lecturer;
        this.dems = new ArrayList<>();
        this.skills = new ArrayList<>();
        this.duration = duration;
        this.start = start;
    }
    
    /**
     * Static factory method that can create a period from a list of consecutive AvailBlock objects.
     * @param name
     * @param blocks
     * @param lecturer
     * @return
     */
    public static Period from(String name, List<AvailBlock> blocks, Lecturer lecturer)
            throws IllegalArgumentException {
        
        if ( !AvailBlock.isConsecutive(blocks) ) {
            throw new IllegalArgumentException( "Non-consecutive AvailBlock objects." );
        }
        
        ArrayList<AvailBlock> blocksSorted = new ArrayList<>(blocks);
        Collections.sort(blocksSorted);
        LocalDateTime start = blocksSorted.get(0).getStart();
        int duration = blocksSorted.size();
        
        return new Period(name, start, duration, lecturer);
    }
    
...    
    public LocalDateTime getStart() {
        return start;
    
// more getters and setters ...
    
    public LocalDateTime getEnd() {
        return this.start.plusSeconds(this.duration);
    }
    
}

共有1个答案

楚畅
2023-03-14

在使缓存无效、更改JDK等各种尝试之后,我删除了DemaVailConstraint类声明中的 部分。我想我知道这为什么管用了。将生成演示器句点的代码段添加到占位符类型中,而不是引用我的自定义类。这就是为什么类不能访问我的方法。我在抽象类约束中保留了占位符代码 (变量和域),现在我想知道是否真的需要在子类中指定这些类型。

 类似资料:
  • 我遇到了一个问题,在我所有的应用程序中,右上角都有一个红叉。我可以运行它,但是十字架似乎没有消失。 我打开了运行/调试配置,它显示警告:找不到主方法。当我已经为每个应用程序都有了相应的主类和方法时,我不明白为什么找不到它。 我试图关闭项目,重新启动IntelliJ,重新启动我的笔记本电脑,刷新我的桌面,通过单击重新导入所有Gradle项目来刷新Gradle,重建项目并单击无效缓存/重新启动。我还尝

  • 简介 框架中内置封装了一些公共函数,开发者在实际业务中可以直接使用,无需重复封装。其中包括: 协程函数 数组函数 目录(文件夹)函数 环境函数 文件函数 文件系统函数 对象函数 PHP 助手函数 字符串函数 系统函数 XML 函数 通用函数 协程函数 创建协程Swoft 框架中不能使用 Swoole 提供的 go 函数创建协程,否则会造成请求和上下文丢失最终导致一些不可预估的问题。 Swoft 拥

  • 我正在使用IBM Watson服务,并通过maven依赖项导入了该库。 我认为一切都很顺利,因为所有的类都显示在外部库部分: 实例化类很好,但如果我尝试使用这些类中的方法,Intellij说“无法解析符号‘methodname’”。 我已经尝试了无效缓存操作,并尝试了其他可以在互联网上找到的技巧,但没有任何效果。。。我做错了什么?我是否必须勾选任何选项,以便Intellij找到方法?

  • 我在一个公共类中有以下构造函数: 和变量在类中定义,该类对其进行了扩展。 当使用执行它时,我会得到以下错误消息。 将其设置为静态的,或者向类中添加一个无参数的构造函数 抛出com.hp.lft.sdk.GeneralleanFTException,java.lang.InterruptedException:将其设置为静态,或者在org.testng.internal.utils.CheckIns

  • 本文向大家介绍iOS常用的公共方法详解,包括了iOS常用的公共方法详解的使用技巧和注意事项,需要的朋友参考一下 1. 获取磁盘总空间大小 2. 获取磁盘可用空间大小 3. 获取指定路径下某个文件的大小 4. 获取文件夹下所有文件的大小 5. 获取字符串(或汉字)首字母 6. 将字符串数组按照元素首字母顺序进行排序分组 使用如下: 输出结果如下: 输出结果 7. 获取当前时间 8. 计算上次日期距离

  • 我正试着用Spring开始我的第一个项目。我使用IntelliJ idea,我对它也有点陌生。但无论如何,我遵循了Jetbrains网站上写的步骤,我不知道我做错了什么,但我在默认创建的第一个文件中遇到了很多错误。 Bloombookingapplication。Java语言 也许我很蠢,但我不知道我错过了哪一步... 我该怎么解决这个问题? 我已经找到了使用快速修复按钮添加Spring的方法。

  • 我是Java EE和Maven的新手,所以我不确定需要哪些信息才能看到我犯了错误。 当我右键单击我的项目并进入Maven-->Reload project时,build选项卡打开,出现以下错误 当我悬停maven assembly插件时,IDE还告诉我 如果我需要任何进一步的信息,请告诉我。

  • 我有智慧的想法。我做了一些编码练习(在maven中做了一些项目),并且在Idea15 CE中开发它。然后更新来了,我无法再次构建项目,因为错误:JComboBox的使用是在JDK1.6 API之后泛化的,这会导致JDK5.0的编译问题。(在maven中是target JDK1.8,在IDEA首选项是JDK1.8,在project首选项是JDK1.8。我试过从IDEA 15导入设置(在那里它仍然工作