Что-нибудь общее? Вы можете использовать оператор пересечения: & amp;
[ 1, 1, 3, 5 ] & [ 1, 2, 3 ] #=> [ 1, 3 ]
Если вы ищете полное пересечение, однако (с дубликатами) проблема более сложная, здесь уже переполнение стека: Как вернуть пересечение массива Ruby с дублирующимися элементами? (проблема с биграммами в коэффициенте кости)
Или быстрый фрагмент , который определяет «real_intersection» и проверяет следующий тест
class ArrayIntersectionTests < Test::Unit::TestCase
def test_real_array_intersection
assert_equal [2], [2, 2, 2, 3, 7, 13, 49] & [2, 2, 2, 5, 11, 107]
assert_equal [2, 2, 2], [2, 2, 2, 3, 7, 13, 49].real_intersection([2, 2, 2, 5, 11, 107])
assert_equal ['a', 'c'], ['a', 'b', 'a', 'c'] & ['a', 'c', 'a', 'd']
assert_equal ['a', 'a', 'c'], ['a', 'b', 'a', 'c'].real_intersection(['a', 'c', 'a', 'd'])
end
end
Чтобы сохранить имена в файле класса для целей отладки, попробуйте свойства проекта, компилятор Java, затем «Добавить атрибуты переменных в сгенерированные файлы классов» (см. Eclipse Help ).
Компиляция следующего источника:
public class StackOverflowTest {
public void test(String foo, String bar) {
// blah
}
}
Декомпилирован в:
// Compiled from StackOverflowTest.java (version 1.5 : 49.0, super bit)
public class StackOverflowTest {
// Method descriptor #6 ()V
// Stack: 1, Locals: 1
public StackOverflowTest();
0 aload_0 [this]
1 invokespecial java.lang.Object() [8]
4 return
Line numbers:
[pc: 0, line: 1]
Local variable table:
[pc: 0, pc: 5] local: this index: 0 type: StackOverflowTest
// Method descriptor #15 (Ljava/lang/String;Ljava/lang/String;)V
// Stack: 0, Locals: 3
public void test(java.lang.String foo, java.lang.String bar);
0 return
Line numbers:
[pc: 0, line: 4]
Local variable table:
[pc: 0, pc: 1] local: this index: 0 type: StackOverflowTest
[pc: 0, pc: 1] local: foo index: 1 type: java.lang.String
[pc: 0, pc: 1] local: bar index: 2 type: java.lang.String
}
Смотрите, что имена параметров сохраняются в файлах классов.
Я бы посоветовал вам посмотреть, как вы исходный код компилируется, для какой версии он скомпилирован и т. д.
РЕДАКТИРОВАТЬ:
А, я вижу, что для интерфейсов все по-другому - похоже, у них нет этой информации для отладчика, что, я думаю, имеет смысл. Я не думаю, что есть способ обойти это, если вы просто хотите видеть имена параметров, когда редактируете исходный текст,
Вам не нужен специально источник, чтобы имена аргументов отображались в Eclipse ... Если вы укажете Javadoc, Eclipse отобразит аргументы.
Может помочь компиляция с поддержкой отладки, при которой все имена сохраняются в файле .class.
хотя я не знаю, учитывает ли Eclipse это.
Вам не нужен отдельный файл Javadoc, вы можете создавать «встроенные» документы javadoc в Eclipse, используя специальный комментарий с двумя звездочками (*) после первой косой черты многострочного комментария.
пример кода:
public class MyClass
{
/**
* documentation of your method
*
* @param name a String describing the name
* @param options used to describe current option
* @param query
* @param comment
* @return void
*/
void myMethod(String name, String options, String query, String comment)
{
...
}
}
В структуре данных файла класса нет поддержки для хранения имен параметров для любого метода, нет независимо от того, какие параметры javac вы используете.
Чтобы увидеть исходные имена в IDE, вы должны предоставить их либо в javadoc, либо в источнике.
Если у вас есть особая потребность получить их во время выполнения, можно добавить аннотации к параметрам, но вам придется создать свой собственный, поскольку стандартного набора для использования нет.
Извините, не могу быть более полезным
ИЗМЕНИТЬ : Я полностью исправлен ... в формате файла классов явно есть место для именованных параметров ( JLS 4.7 )
Я не вижу, как, черт возьми, вы можете получить их, используя java.lang.reflect. *
Eclipse подберет имена аргументов, если вы включите отладочную информацию в файл класса: javac -g: vars
должно быть достаточно.