Java Generics使用参数化类的问题

时间:2018-03-24 07:41:18

标签: java generics

所有!我现在已经把这些东西打破了几个小时。对不起,如果它是如此微不足道的东西,但我想我不太了解Java泛型。我是一名新手Java程序员。

我有2个接口。 Int1和Int2。 Int2扩展了Int1。 Int2Impl实现Int2。 Lesson1.java和AnotherClass.java也在下面给出。课后问题如下。

Int1.java

def load_new_data(self):
    full = list()

    with open(self.filename, 'r') as csv_in:
        myreader2 = csv.reader(csv_in, delimiter=';')

        count = 0
        for row in myreader2:
            if count == 0:
                headers = row[1:]
                count += 1
            elif count == 1:
                count += 1
            else:
                current_row = row[1:-1]
                full.append(current_row)
                count += 1

    new_df = pd.DataFrame.from_records(full, columns=headers)
    new_df = new_df.iloc[1:, :80]

    self.fill_in_blanks(new_df)
    new_df = dp.remove_inc_variables(new_df, .1)
    print ('\t Removing incomplete variables.')

    for i in new_df.columns:
        try:
            new_df.loc[:, i] = new_df.loc[:, i].astype(float)
        except:
            pass
    return new_df

Int2.java

     public interface Int1<E> {
           public Lesson1<E> interfaceimpl(Class<E> klass);
     }

Lesson1.java

     public interface Int2<E> extends Int1<E> {
         String getSomething();
     }

Int2Impl.java

    public class Lesson1<E> {

    }

AnotherClass.java

    public class Int2Impl<E> implements Int2<E> {
        Class<E> klass;

        @Override
        public String getSomething() {
          return "nothing";
        }

        @Override
        public Lesson1<E> interfaceimpl(Class<E> klass) {
            this.klass = klass;
            return null;
        }
   }

导致编译问题的代码行是

interface2.interfaceimpl(克拉斯);在AnotherClass.java类中

Eclipse提供的错误和快速修正:

错误:

  public class AnotherClass<E> {
        private Int2<E> interface2; 

        private <E> void newMethod(Class<E> klass) {
            interface2 = new Int2Impl<>();
          **interface2.interfaceimpl(klass);**

      }
   }

快速修正:

  The method interfaceimpl(java.lang.Class<E>) in the type Int1<E> is not 
  applicable for the arguments (java.lang.Class<E>)

没有一个快速修复对我有意义。此外,无论我选择哪一个,他们也无法解决问题。有人可以 指出错误以及为什么Eclipse会抛出此错误?

谢谢!

1 个答案:

答案 0 :(得分:4)

您的AnotherClass已经是通用类型E。无需在方法级别再次定义E

只需从您的<E>中移除newMethod(),如下所示:

public class AnotherClass<E> {
    private Int2<E> interface2;

    private void newMethod(Class<E> klass) {
        interface2 = new Int2Impl<>();
        interface2.interfaceimpl(klass);

    }
}