2017-07-17 11 views
0

私はJavaを学んでいます。私はいつもC#でJavaで行ってきたことをしようとしています。C#リスト実装... Javaで

目標は、 "MyItems"のリストにクラス "MyItem"をラップすることです。これにより、(MyItemsList<MyItem>よりも読みやすく/理解しやすくなります...たとえば、IEnumerable<KeyValuePair<string,List<Dictionary<int,bool>>>>のようにもっと複雑にする必要があります... List<IEnumberaable<KeyValuePair<...>>>>>の代わりにMyKVPDictionariesを求めます)。

ちょうど周りを見て...それはC#のようにあなたのもののデフォルトの実装を維持することができます(以下を見て、ちょうど働く)。

Javaを見て... C#のようにリストを実装する方法はありますか?または、手動でリストの個々の部分を手動で実装する必要がありますか? (.add、.list、.containsなど)。

以下、私はClass ...と "List<Class>"という基本的な実装をC#で持っています。

class MyItems implements List<MyItem>をJavaで実装するのは本当にそれ以上の作業ですか、それとも処理を簡略化するために何か不足していますか?

(Javaコードは、Resharper "Auto Implement missing members" IntubiJを介したスタブ)を持つMyItems.javaクラスファイルのみです。

C#バージョン.NetFiddle

using System; 
using System.Collections.Generic; 

public class Program 
{ 
    public static void Main() 
    {  
     var myItems = new MyItems(); 
     myItems.Add(new MyItem("Hello")); 
     myItems.Add(new MyItem(" ")); 
     myItems.Add(new MyItem("World")); 
     myItems.Add(new MyItem("!")); 

     foreach(var item in myItems) 
      Console.Write(item.Name); 
    } 
} 

public class MyItems : List<MyItem> 
{ 

} 

public class MyItem 
{ 
    public MyItem(string name) 
    { 
     Name = name; 
    } 
    public string Name { get; private set; } 
} 

Javaのバージョンを開始/スタブ:

package items; 

import java.util.Collection; 
import java.util.Iterator; 
import java.util.List; 
import java.util.ListIterator; 

public class MyItems implements List<MyItem> { 
    @Override 
    public int size() { 
     return 0; 
    } 

    @Override 
    public boolean isEmpty() { 
     return false; 
    } 

    @Override 
    public boolean contains(Object o) { 
     return false; 
    } 

    @Override 
    public Iterator<MyItem> iterator() { 
     return null; 
    } 

    @Override 
    public Object[] toArray() { 
     return new Object[0]; 
    } 

    @Override 
    public <T> T[] toArray(T[] a) { 
     return null; 
    } 

    @Override 
    public boolean add(MyItem generatePreSignedUrl) { 
     return false; 
    } 

    @Override 
    public boolean remove(Object o) { 
     return false; 
    } 

    @Override 
    public boolean containsAll(Collection<?> c) { 
     return false; 
    } 

    @Override 
    public boolean addAll(Collection<? extends MyItem> c) { 
     return false; 
    } 

    @Override 
    public boolean addAll(int index, Collection<? extends MyItem> c) { 
     return false; 
    } 

    @Override 
    public boolean removeAll(Collection<?> c) { 
     return false; 
    } 

    @Override 
    public boolean retainAll(Collection<?> c) { 
     return false; 
    } 

    @Override 
    public void clear() { 

    } 

    @Override 
    public MyItem get(int index) { 
     return null; 
    } 

    @Override 
    public MyItem set(int index, MyItem element) { 
     return null; 
    } 

    @Override 
    public void add(int index, MyItem element) { 

    } 

    @Override 
    public MyItem remove(int index) { 
     return null; 
    } 

    @Override 
    public int indexOf(Object o) { 
     return 0; 
    } 

    @Override 
    public int lastIndexOf(Object o) { 
     return 0; 
    } 

    @Override 
    public ListIterator<MyItem> listIterator() { 
     return null; 
    } 

    @Override 
    public ListIterator<MyItem> listIterator(int index) { 
     return null; 
    } 

    @Override 
    public List<MyItem> subList(int fromIndex, int toIndex) { 
     return null; 
    } 
} 
+4

ジェネリック 'List'は、クラスのインタフェースではありません。だからあなたはそのメンバーのすべてを実装する必要があります。 'List'を実装する' ArrayList'を継承することができます。 'public class MyItems extends ArrayList ' –

+0

"私はあなたを捨てました。 – niksofteng

答えて

7

JavaのListタイプは、インタフェース、C#のIListのカウンターパートです。実装したい場合は、ほとんどのメソッドをゼロから書き込む必要があります。 C#の具体的なListクラスは、JavaのArrayListなりの対応:Javaで

public class MyItems extends ArrayList<MyItem> { 
+0

ああ...私は何か基本的なものが欠けていることを知っていた。私はそれが正しい方向に私を得るだろうと思う。 – WernerCD

+0

@WernerCD [Java APIのドキュメント](http://docs.oracle.com/javase/7/docs/api/)に慣れ親しんでおくことをお勧めします(このリンクはJava 7用です)。読者は必要に応じてJava 8のドキュメントを見つけることができます)。これらのドキュメントでは、クラスとインターフェースの名前を教えてくれます。 C#とは異なり、Javaプログラマは通常、インタフェース名を「I」で開始しません。 –

+0

ええ、それは私の次の質問になるだろう... C#とJavaは非常に似ています...しかし、非常に異なっています。私は良い基本書を持っていますが、私がJavaのどこにいるかを超えて何かをしようとしていました。私はIList/List対List/ArrayListを考慮しなかったと認めます。これは、用語が異なり、ArrayListはC#のリストの古いバージョンです(リストは汎用でArrayListはオブジェクトです)。 – WernerCD