Это ваша функция, которую вы передаете, единственным входным аргументом является тау.
tau => MyFunction(r, tau, appCfg, Ta, Da) * ProbDensity(tau)
Кажется, нет способа получить доступ к внешнему классу снаружи. Но можно сделать это как это:
class A {
int i = 0;
class B {
final A outer = A.this;
int j = 1;
}
}
class Test {
public static void main() {
A a = new A();
A.B b = a.new B();
A c = b.outer // get "a" back
}
}
ClassName.this
будет экземпляр outerclass, связанного с экземпляром внутреннего класса.
[Редактирование: Мой ответ подходит для программистов C#, но я не могу гарантировать что его применимое к Java.]
B является внутренним классом, не подклассом A. Кроме того, B не содержит экземпляр A, таким образом, Ваш код, как, не может возвратить экземпляр A.
Необходимо реструктурировать классы следующим образом:
class A
{
public class B
{
public A Parent;
public B(A parent)
{
this.Parent = parent;
}
}
}
Теперь Ваш класс B имеет поле 'Parent', которое возвращает его родителя. Можно использовать эти классы следующим образом (это - синтаксис C#, потому что я не знаю, имеет ли Java другой синтаксис для инстанцирования внутренних классов):
public static void Main(String[] args)
{
A parent = new A();
A.B child = new A.B(child);
A backToParent = child.Parent;
}
Конечно, создание Вашего класса B таким образом кажется мало забавным: технически, можно передать в любом родителе. Вероятно, было бы лучше переписать Ваш класс с методом, который возвращает B:
class A
{
public class B
{
public A Parent;
public B(A parent)
{
this.Parent = parent;
}
}
public B getChild()
{
return new B(this);
}
}
public static void Main(String[] args)
{
A parent = new A();
A.B child = A.getChild();
A backToParent = child.Parent;
}
Можно получить доступ к нему с ParentClass.this
синтаксис из внутреннего класса.
например.
public class Outter
{
class Inner {
public Outter getOutter()
{
return Outter.this;
}
}
public Inner getInner(){
return new Inner();
}
}
class Runner{
public static void main(String[] args){
Outter out = new Outter();
Outter.Inner inner = out.getInner();
System.out.println(inner.getOutter().toString());
}
}
мне показалось, что это работает
class A {
int i = 0;
class B {
int j = 1;
}
}
class Test {
public static void main() {
A a = new A();
A.B b = a.new B();
A c = (A)b.getClass().getDeclaredField("this$0").get(b);
}
}