在我有一个班级
A a = new A(){
stuffhere
};
现在我发现我需要在方法中创建新的A并返回它,但我必须从类调用者中定义这个东西。 java中有没有办法这样做?像
这样的东西A a = createAClass(){
stuffhere
};
public A createAClass()[T]{
return new A(){T};
}
或类似的东西。我宁愿不使用接口传递给create方法,因为我的匿名类不仅重写方法,还添加属性和新函数,我不认为我可以通过接口传递它们。
有什么想法吗?
-1ers的编辑(一个简单的评论就足够了) 使用语法[T],显然是错误的,我的意思是可以传递通用代码的东西,比方说代码的复制粘贴。
createAClass()[int a; String b; @override public void mymethod(){dosomethigb;} public void dosomethingelse(){dosomethingelse;}];
就像
一样public A createAClass(){
return new A()
{
int a;
String b;
@override public void mymethod()
{dosomethigb;}
public void dosomethingelse()
{dosomethingelse;}};
};}
但如果我写在程序的另一部分
createAClass()[float c; List d; public void yourmethod(){dosomething2;} @override public void dosomethingelse(){dosomethingelse2;}];
它会像
一样工作public A createAClass(){
return new A()
{
float c;
List d;
public void yourmethod()
{dosomething2;}
@override public void dosomethingelse()
{dosomethingelse2;}
};}
我的不好,我选择了一个不好的例子,但我认为这是最明智的方式。也许我应该使用X而不是T?..
长话短说: 我想在方法中创建一个匿名类,但是定义匿名类在方法调用者中的作用,而不是在方法内部(如标题所示)
EDIT2: 我知道我无法从类中访问新方法,我现在所做的是创建一个匿名类,添加一些属性和方法,然后在重写方法中使用它们。添加的方法不是问题,因为我可以使方法调用者传递由创建的匿名类中的重写方法调用的接口,问题是属性。我不知道如何在匿名类中添加它们从方法调用者传递它们。
答案 0 :(得分:1)
以下内容通常有效:
public A createAClass(final String value){
return new A(){
// some code here that can access value
};
}
如果您正在寻找其他内容,请澄清问题。
修改强>
答案是不,你不能这样做。您正在尝试为A
创建一个没有定义API的A
。即使您可以按照您的建议行事,如果A
未在某处定义,A
的任何用户如何知道哪些方法/字段可用?要使A
有用,您需要拥有A
实现的API。
答案 1 :(得分:1)
不确定我是否完全理解。但模式是这样的:
public class Here {
private int stuff;
public class A {
private A() { ... }
... ++stuff; ...
}
public A createA() { ... }
}
...
Here here = ...
A a = here.createA();
编辑后的问题:
最简单的方法是覆盖方法:
final Object stuff = ...;
A a = new A() {
@Override
protected void onSomeEvent() {
... stuff.toString();
}
}
然后A可以调用onSomeEvent。