Вы можете использовать пакет java.lang.instrument
Скомпилировать и поместить этот класс в JAR:
import java.lang.instrument.Instrumentation;
public class ObjectSizeFetcher {
private static Instrumentation instrumentation;
public static void premain(String args, Instrumentation inst) {
instrumentation = inst;
}
public static long getObjectSize(Object o) {
return instrumentation.getObjectSize(o);
}
}
Добавить следующее в MANIFEST.MF
:
Premain-Class: ObjectSizeFetcher
Использовать getObjectSize:
public class C {
private int x;
private int y;
public static void main(String [] args) {
System.out.println(ObjectSizeFetcher.getObjectSize(new C()));
}
}
Вызывать с помощью:
java -javaagent:ObjectSizeFetcherAgent.jar C
давайте начнем с первой точки
func chooseStepFunction(backward: Bool) -> (Int) -> Int
Просматривая это объявление функции, вы можете сказать, что chooseStepFunction
является функция, которая принимает один аргумент типа Bool
и возвращает функцию типа (Int)-> Int
, которая принимает один аргумент Int в качестве параметра и возвращает Int
. поэтому здесь chooseStepFunction
возвращает функцию типа (Int)->Int
на основе переданного в backward
параметра.
stepBackward
или stepForward
, поэтому мы не используем скобки (). с точки зрения первого вы должны понимать, что chooseStepFunction
будет возвращать функцию, и эта функция имеет тип (Int)->Int
, и внимательно посмотрите, вы обнаружите, что сигнатура stepBackward and stepForward
имеет значение (Int)->Int
и будет возвращена как chooseStepFunction
return backward ? stepBackward : stepForward
3.
let moveNearerToZero = chooseStepFunction(backward: currentValue > 0)
здесь chooseStepFunction
возвращают функцию типа (Int)->Int
, которая хранится в moveNearerToZero
, поэтому это не простая переменная, это функция, поэтому мы можем использовать скобки.
Использование типов функций Вы используете типы функций, как и любые другие типы в Swift. Например, вы можете определить константу или переменную для типа функции и назначить соответствующую функцию для этой переменной:
var mathFunction: (Int, Int) -> Int = addTwoInts
Это можно прочитать как:
«Определить переменную называется mathFunction, которая имеет тип «функция, которая принимает два значения Int и возвращает значение Int.» Установите эту новую переменную для ссылки на функцию с именем addTwoInts. »
Функция addTwoInts(_:_:)
имеет того же типа, что и переменная mathFunction, и поэтому это присваивание разрешено средством проверки типов Swift.
Теперь вы можете вызывать назначенную функцию с именем mathFunction:
print("Result: \(mathFunction(2, 3))")
Надеюсь, это поможет. [+1139]