2012-02-16 2 views
-3

Скажем, я имею функцию следующим образом:Почему вы не можете передать экземпляр Collections в качестве параметра paramerter в Java?

private void check(HashSet<String> input) 
{ 
} 

Функция вызова Я пытаюсь сделать это следующим образом:

check(new HashSet<String>value("test")); 

Это не разрешено в Java. В Java нет определения для этого.

Теперь я знаю, что то же самое, что я могу сделать в C# как это:

String[] val={"test"}; 
check(new HashSet<String>(val)); 

Я хотел бы знать, почему это так. В Java я могу передать Integer таким образом. Например,

test(new Integer(3)); 

Хотя это невозможно в C# для целых чисел/Int32.

Я пытаюсь понять, почему были приняты эти проектные решения. Есть ли преимущества этого подхода?

Я пытаюсь понять, почему конкретный аспект языка такой, какой он есть? Не указывайте синтаксическую ошибку при использовании массива. asList()

+0

эти вопросы лучше всего подходит для http://programmers.stackexchange.com/ – Jeff

+1

что HashSet значение ("тест") ??? Вы проверили и выяснили, работает ли это? –

+0

@Jeff Почему он лучше подходит, и если это возможно, я могу его перенести? – gizgok

ответ

0

Вы хотите создать карту сиглетона. Сделайте это следующим образом: Collections.singleton("test"). Но изменить определение метода прототипа для

private void check(Set<String> input)

Это всегда лучше использовать интерфейсы, если это возможно, чем конкретные классы.

2

Я думаю, единственное, что неправильно в вашем коде синтаксис ... Ближайший синтаксис я могу думать:

new HashSet<String> (Arrays.asList(new String[]{"test"})); 

Что basiclly означает:

1.- Создать массив, содержащий только одна строка

new String[]{"test"} 

2.- Wrap массив в списке

Arrays.asList(new String[]{"test"}) 

3.- Инициализировать HashSet строк с обернутым массивом в списке (к сожалению, HashSet принимает только экземпляры коллекций, а массив не является экземпляром коллекции ... Кроме того, только массивы могут быть инициализированы inline в java)

new HashSet<String> (Arrays.asList(new String[]{"test"})); 
1

Конструктор Hashmap не принимает строку, он принимает коллекцию в java. Попробуйте это

новый HashSet (Arrays.asList ("test"));

0

На самом деле вы понимаете неправильно, в java вы можете передать экземпляр Collections в качестве параметра функции, но у вас есть хотя бы напишите правильно !!

Это будет работать:

import java.util.*; 

public class Test { 

    private static void check(HashSet<String> input) 
    { 
    } 

    public static void main (String []args) { 
     check(new HashSet<String>()); 
    } 
} 
Смежные вопросы