Java 我可以在接口中创建自定义对象并在实现类中定义它吗?

Java 我可以在接口中创建自定义对象并在实现类中定义它吗?,java,object,interface,jgrasp,Java,Object,Interface,Jgrasp,我有一个接口源代码,我必须为它创建一个类。接口包含一个用户定义的对象,该对象仅在接口中声明,必须在我自己的类中重写和定义。我的类稍后在一个单独的文件中使用,main调用它的方法 源代码(伪代码): 我需要编写一个类来定义IObj中的方法声明中使用的obj(我知道obj应该大写,但源代码中就是这样给出的)。类文件放在包含folder1的同一文件夹中,导入包时没有任何错误 我的类(伪代码): 关于类方法的细节我没有任何错误,但我希望这能让我了解如何在类中使用接口。 当我尝试编译我的类时,我得到以下消

我有一个接口源代码,我必须为它创建一个类。接口包含一个用户定义的对象,该对象仅在接口中声明,必须在我自己的类中重写和定义。我的类稍后在一个单独的文件中使用,main调用它的方法

源代码(伪代码):

我需要编写一个类来定义IObj中的方法声明中使用的obj(我知道obj应该大写,但源代码中就是这样给出的)。类文件放在包含folder1的同一文件夹中,导入包时没有任何错误

我的类(伪代码):

关于类方法的细节我没有任何错误,但我希望这能让我了解如何在类中使用接口。 当我尝试编译我的类时,我得到以下消息:

IObj.java:9: error: cannot find symbol
  
    obj someFunc(**obj** obj2);
 
  symbol: class obj
  location: interface IObj
我假设这与对象如何不是可识别的类型(如int或float)有关。我尝试过在项目中包含所有文件(我使用的是JGrasp),三重检查文件位置和导入代码,包括类文件中的接口(更多的是最后的尝试),并考虑在我的obj构造函数中向上转换到IObj(尽管我不确定这是否可行)


我想知道是否有一种方法可以让编译器忽略接口中的对象,因为它是在我的类中定义的,或者我在定义类中的对象时错过了一个步骤,这会导致错误,或者可能是我还没有考虑的另一种方法!在这种情况下,我无法更改源代码,因此我正在寻找一种以不同方式实现源代码的方法。谢谢你的建议

我认为在这里使用泛型会使您受益。编译器似乎无法在接口
IObj
中找到类型
obj
。我认为您在这里遇到的问题是,接口
IObj
是以伪代码给出的,就像您给出的注释一样。它的定义是类扩展它所必需的,但是它依赖于要定义的类。有点鸡和蛋的情况。因此,要么使用Object作为
IObj
中的类型,要么按照@JustAnotherDeveloper@BillNaylor实际的源代码不是伪代码,我只是为了清晰起见简化了。我唯一更改的是对象/方法名称,现在看来这是多余的。在源代码中,obj名为bit,接口名为IBit等。谢谢您的建议。@JustAnotherDeveloper。我可以在不更改源代码的情况下使用泛型吗?我认为在这里使用泛型会让您受益匪浅。编译器似乎无法在interface
IObj
中找到type
obj
。我认为您遇到的问题是,interface
IObj
是用伪代码给出的,就像您给出的注释一样。它的定义是类扩展它所必需的,但是它依赖于要定义的类。有点鸡和蛋的情况。因此,要么使用Object作为
IObj
中的类型,要么按照@JustAnotherDeveloper@BillNaylor实际的源代码不是伪代码,我只是为了清晰起见简化了。我唯一更改的是对象/方法名称,现在看来这是多余的。在源代码中,obj名为bit,接口名为IBit等。谢谢您的建议。@JustAnotherDeveloper。我可以在不更改源代码的情况下使用泛型吗?
import folder.subfolder.*;

public class obj implements IObj {
   private int objValue;
   obj(int val) {
      objValue = val;
   }
   obj() {
      objValue = 0;
   }
   @Override
   public void setVal(int val) {
      this.objValue = val;
   }
   @Override
   public int getVal() {
      return this.objValue;
   }
   @Override
   public obj someFunc(obj obj2) {
      //perform logic on this obj and obj2, return as new obj
   }
   @Override
   public obj anotherFunc() {
      //perform logic on this obj, return as new obj
   }   
   ...
}
IObj.java:9: error: cannot find symbol
  
    obj someFunc(**obj** obj2);
 
  symbol: class obj
  location: interface IObj