我相信,我正在处理JAVA GUI中的竞争条件.
我有一些方法在匿名类中创建一个"匿名方法",如下所示:
synchronized foo()
{
someMethod(new TimerTask()
{
public synchronized run()
{
//stuff
}
};
}
Run Code Online (Sandbox Code Playgroud)
问题:在TimerTask对象或foo所在的类上是否同步了run方法?
问题2:如果我在run()声明中删除了"synchronized",而在run()体内有一个synchronized(this){}块,那么"this"会引用TimerTask对象或者对象是包含foo()的方法的实例?
请帮帮我.
谢谢,jbu
在Neal Gafter的"超类型令牌"模式(http://gafter.blogspot.com/2006/12/super-type-tokens.html)中,使用匿名对象传递参数化类型:
class ReferenceType<T>{}
/* anonymous subclass of "ReferenceType" */
ReferenceType<List<Integer>> referenceType = new ReferenceType<List<Integer>>(){
};
Type superClass = b.getClass().getGenericSuperclass();
System.out.println("super type : " + superClass);
Type genericType = ((ParameterizedType)superClass).getActualTypeArguments()[0];
System.out.println("actual parameterized type : " + genericType);
Run Code Online (Sandbox Code Playgroud)
然后结果是:
super type : com.superluli.test.ReferenceType<java.util.List<java.lang.Integer>>
actual parameterized type : java.util.List<java.lang.Integer>
Run Code Online (Sandbox Code Playgroud)
我的问题是,匿名对象"referenceType"的作用是什么让它起作用?如果我定义一个"ReferenceType"的显式子类并使用它而不是匿名样式,它就不会如预期的那样.
class ReferenceType<T>{}
class ReferenceTypeSub<T> extends ReferenceType<T>{}
/* explicitly(or, named) defined subclass of "ReferenceType" */
ReferenceType<List<Integer>> b = new ReferenceTypeSub<List<Integer>>();
Type superClass = b.getClass().getGenericSuperclass();
System.out.println("super type : " + superClass);
Type …Run Code Online (Sandbox Code Playgroud) 在C++中,匿名命名空间等同于:
namespace $$$$ {
//something
}
using namespace $$$$;
Run Code Online (Sandbox Code Playgroud)
其中$$$$是某种唯一标识符.然后,匿名命名空间对于不应在编译单元外看到的代码很有用.
到目前为止一直很好,但是最近我开始用模板编写一些代码,这样的代码必须在头文件中,因此使用匿名命名空间没有多大意义,因为仅仅包含头将使隔离效果无效.
那么问题是,在这种情况下建议的方式是什么?我开始使用名为Private的命名空间.它并没有真正阻止任何想要在里面使用标识符的人,但至少它将名称冲突减少为id"Private".
还有更好的方法吗?建议?
Craigslist有一个很好的功能,当你回复海报时,你会回复一个电子邮件,如 job-fepsd-1120347193@craigslist.org.然后,该电子邮件又被发送到真实电子邮件.
我正在寻找关于如何使用PHP执行此操作的几个指针.
谢谢,
Levi
我正在查看一些(C++)代码,发现类似这样的东西:
//Foo.cpp
namespace
{
void SomeHelperFunctionA() {}
void SomeHelperFunctionB() {}
void SomeHelperFunctionC() {}
//etc...
class SomeClass //<---
{
//Impl
};
}
Run Code Online (Sandbox Code Playgroud)
SomeHelperFunction[A-Z]是只在该翻译单元中需要的功能,所以我理解为什么他们是匿名的namespace.类似地,SomeClass也仅在该翻译单元中需要,但我的印象是,如果您没有全局类声明(例如,in),您可以在不同的翻译单元中具有相同名称的类,而不会出现任何类型的命名冲突一个通常包含的头文件).
我还要提到的是这个特定的翻译单元并没有包括可能声明一个类具有相同名称(任何头SomeClass).
那么,根据这些信息,有人可以说明为什么原来的程序员可能会这样做吗?也许只是作为未来的预防措施?
老实说,我以前从未见过匿名命名空间中使用过的类.
谢谢!
很少我会在python中遇到一些使用匿名函数返回匿名函数的代码......?
不幸的是我手头上找不到一个例子,但它通常采用这样的形式:
g = lambda x,c: x**c lambda c: c+1
Run Code Online (Sandbox Code Playgroud)
为什么有人会这样做?也许你可以给出一个有意义的例子(我不确定我制作的那个是否有意义).
编辑:这是一个例子:
swap = lambda a,x,y:(lambda f=a.__setitem__:(f(x,(a[x],a[y])),
f(y,a[x][0]),f(x,a[x][1])))()
Run Code Online (Sandbox Code Playgroud) 我有课程,我正在排序列表.
import java.util.*;
public class First
{
private static HashMap<String,Second> msgs;
public static void main(String[] args)
{
List<String> ls=new ArrayList<String>();
ls.add("fourth");
ls.add("2");
ls.add("second");
ls.add("first");
ls.add("third");
ls.add("1");
Iterator it=ls.iterator();
// before sorting
while(it.hasNext())
{
String s=(String)it.next();
System.out.println(s);
}
Collections.sort(ls, new Comparator(){
public int compare(Object o1, Object o2) {
return -1;
// it can also return 0, and 1
}
});
System.out.println(" ");
//after sorting
Iterator iti=ls.iterator();
while(iti.hasNext())
{
String s=(String)iti.next();
System.out.println(s);
}
}
}
Run Code Online (Sandbox Code Playgroud)
程序运行后,我得到这些值:
1
third
first
second
2
fourth …Run Code Online (Sandbox Code Playgroud) 我为我的网站使用django auth,它需要安装会话中间件.
Django会话中间件总是添加会话cookie,即使对于匿名用户(未经过身份验证的用户)也是如此.当他们进行身份验证时,Cookie会被另一个表示用户已登录的cookie替换.
我想禁用匿名用户cookie以进行缓存(清漆).
有没有办法禁用匿名用户cookie而不删除使用身份验证的应用程序所必需的会话中间件?
我读了这个问题,解释了C++中匿名变量是如何无效的.
但是下面的程序在GCC 7.2上没有任何警告或错误编译(即使有-Wall) - 演示:
int main() {
int (*); // anonymous variable?
}
Run Code Online (Sandbox Code Playgroud)
在这里,这显然也是一个整数类型的匿名变量.那么,为什么GCC没有显示任何错误或警告?这是GCC的错误吗?
我构建以下匿名对象:
var obj = new {
Country = countryVal,
City = cityVal,
Keyword = key,
Page = page
};
Run Code Online (Sandbox Code Playgroud)
我想只在其值存在时才在成员中包含成员.
例如,如果cityVal为null,我不想在对象初始化中添加City
var obj = new {
Country = countryVal,
City = cityVal, //ignore this if cityVal is null
Keyword = key,
Page = page
};
Run Code Online (Sandbox Code Playgroud)
这可能在C#中吗?