接口C#中的类型 - java

在java中,如果我有类似的东西,似乎可以正常工作,但是在c#版本中:

 public interface MyIterator<T>: IEnumerator<T>
 {
    BaseClass<T> GetBaseClass();
 }

和:

   public interface IBaseClass<T>: IEnumerator<T>{
         bool Remove(T e);

        IEnumerator<T> Search(T e); 

        bool Contains(T e);

        bool IsEmpty();

        int Size();
   }

但是在实现中我有:

  public abstract class BaseClass<T> : IBaseClass<T>
    {  

  public MyIterator<T> Search(T e)
        {
..}

它不允许我有不同的返回类型,唯一允许的是IEnumerator<T>(从接口)。我知道它有点连线,但这就是给定上下文中需要的方式。例如,其他类:

public class SpecializedContainer<T> : BaseClass<T>

将使用BaseClass)

参考方案

您缺少类型参数,您对IBaseClass的定义应具有类型参数T(除非它们是另一个类的一部分)。

您确定IBaseClass实现了IEnumerator<T>吗?通常它将实现IEnumerable<T>

它不允许我具有不同的返回类型,唯一允许的类型是IEnumerator(来自接口)。

这对于接口实现是不可避免的,但是显式接口实现允许您使用单独的公共方法。

只需创建两个方法,一个返回publicMyIterator<T>和一个返回IEnumerator<T>的显式接口实现。

public abstract class BaseClass<T> : IBaseClass<T>
{
    public MyIterator<T> Search(T e)
    {
        //Do something here
    }

    IEnumerator<T> IBaseClass<T>.Search(T e)
    {
        return Search(e);
    }
}

这将导致呼叫MyEnumerator<T>的类型为BaseClass<T>.Search,呼叫IEnumerator<T>的类型为IBaseClass<T>.Search(根据接口的要求)。当然,请注意,无论哪种情况,实际值都将为MyEnumerator<T>类型。

Java:我可以在Hashmaps中使用数组吗? - java

我可以在Hashmaps中使用数组吗?如果是这样,则声明这种哈希图的确切语法是什么?谢谢 参考方案 数组也是对象。甚至像int[]这样的原始数组。Map<String,String[]> map = new HashMap<String,String[]>();

Java中的<<或>>>是什么意思? - java

This question already has answers here: Closed 7 years ago. Possible Duplicate: What does >> and >>> mean in Java?我在一些Java代码中遇到了一些陌生的符号,尽管代码可以正确编译和运行,但对于括号在此代码中的作用却感…

菱形运算符<>是否等于<?> - java

我在util.TreeSet类中发现,其中一个构造函数正在使用具有空泛型类型的新TreeMap调用另一个构造函数。 public TreeSet(Comparator<? super E> comparator) { this(new TreeMap<>(comparator)); } new TreeMap<>是什么意思…

与哪些运算符>>兼容 - java

我这里没有什么代码int b=3; b=b >> 1; System.out.println(b); 它可以完美工作,但是当我将变量b更改为byte,short,float,double时,它包含错误,但是对于变量int和long来说,它可以完美工作,为什么它不能与其他变量一起工作? 参考方案 位移位运算符(例如>>)与任何整数类型兼…

通过Maven编译器插件不会发生有限的包含和排除 - java

我正在使用3.6.0版的maven编译器插件,在此我们只想在特定文件夹中编译一个文件,而在该位置编译所有其他文件。例如:在文件夹应用程序中有14个文件,从那我只希望编译1个文件,但它编译了所有文件,如果我要排除,则它也不起作用。 <sourceDirectory>${basedir}/../src/java</sourceDirectory…