Сохранение параметра/имен аргумента в скомпилированных классах Java

Что-нибудь общее? Вы можете использовать оператор пересечения: & 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

14
задан Idolon 18 October 2011 в 15:42
поделиться

6 ответов

Чтобы сохранить имена в файле класса для целей отладки, попробуйте свойства проекта, компилятор 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
}

Смотрите, что имена параметров сохраняются в файлах классов.

Я бы посоветовал вам посмотреть, как вы исходный код компилируется, для какой версии он скомпилирован и т. д.

РЕДАКТИРОВАТЬ:

А, я вижу, что для интерфейсов все по-другому - похоже, у них нет этой информации для отладчика, что, я думаю, имеет смысл. Я не думаю, что есть способ обойти это, если вы просто хотите видеть имена параметров, когда редактируете исходный текст,

8
ответ дан 1 December 2019 в 12:27
поделиться

Вам не нужен специально источник, чтобы имена аргументов отображались в Eclipse ... Если вы укажете Javadoc, Eclipse отобразит аргументы.

7
ответ дан 1 December 2019 в 12:27
поделиться

Может помочь компиляция с поддержкой отладки, при которой все имена сохраняются в файле .class.

хотя я не знаю, учитывает ли Eclipse это.

5
ответ дан 1 December 2019 в 12:27
поделиться

Вам не нужен отдельный файл 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)
    {
        ...
    }
}
0
ответ дан 1 December 2019 в 12:27
поделиться

В структуре данных файла класса нет поддержки для хранения имен параметров для любого метода, нет независимо от того, какие параметры javac вы используете.

Чтобы увидеть исходные имена в IDE, вы должны предоставить их либо в javadoc, либо в источнике.

Если у вас есть особая потребность получить их во время выполнения, можно добавить аннотации к параметрам, но вам придется создать свой собственный, поскольку стандартного набора для использования нет.

Извините, не могу быть более полезным

ИЗМЕНИТЬ : Я полностью исправлен ... в формате файла классов явно есть место для именованных параметров ( JLS 4.7 )

Я не вижу, как, черт возьми, вы можете получить их, используя java.lang.reflect. *

2
ответ дан 1 December 2019 в 12:27
поделиться

Eclipse подберет имена аргументов, если вы включите отладочную информацию в файл класса: javac -g: vars должно быть достаточно.

1
ответ дан 1 December 2019 в 12:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: