我正在学习Enum并对此代码感到困惑.
enum Currency{
PENNY, NICKLE, DIME, QUARTER;
@Override
public String toString() {
switch (this) {
case PENNY:
System.out.println("Penny: ");
break;
case NICKLE:
System.out.println("Nickle: ");
break;
case DIME:
System.out.println("Dime: ");
break;
case QUARTER:
System.out.println("Quarter: ");
}
return super.toString();
}
};
public class Check{
public static void main(String[] args){
}
}
Run Code Online (Sandbox Code Playgroud)
当我编译javac Check.java我得到以下.class文件.
Check.class
Currency$1.class
Currency.class
Run Code Online (Sandbox Code Playgroud)
为什么Currency$1.class要创建?如何?背后的原因是什么?我知道内部类的$符号和1代表匿名类1.但是为什么在这个代码中它创建了没有内部类.
类型擦除是删除通用信息以便在编译类上向后兼容的过程.然后,我不知道泛型类中的对象是什么类型的类,但是在继承的类中,例如:
package generics.testing;
class Box<T> {
private T value;
public Box() {
System.out.println("GenericSuperClass: " + getClass().getGenericSuperclass());
}
public T getValue() {
return value;
}
public void setValue(T value) {
this.value = value;
}
}
class IntegerBox extends Box<Integer> {}
public class GenericsTesting {
public static void main(String[] args) {
Box<String> box = new Box<>();
IntegerBox ibox = new IntegerBox();
}
}
Run Code Online (Sandbox Code Playgroud)
我明白了:
GenericSuperClass: class java.lang.Object
GenericSuperClass: generics.testing.Box<java.lang.Integer>
Run Code Online (Sandbox Code Playgroud)
我的问题是,为什么generics.testing.Box<java.lang.Integer>保留这些信息以及存储在哪里?
我正在为我的 Vagrant 设置使用 Ansible(本地)配置器。是否有推荐的方法将环境变量传递给供应商?
例如,我想运行ENV=development vagrant up并让 Vagrant 将环境变量传递ENV给 Ansible。
我尝试使用extra_vars,取自Vagrant 文档:
Vagrant.configure(2) do |vagrant|
# other configuration
vagrant.vm.provision :ansible_local do |ansible|
ansible.playbook = "ansible/server.yml"
ansible.extra_vars = {
env: ENV.fetch("ENV", "development")
}
end
end
Run Code Online (Sandbox Code Playgroud)
但是,当我运行时vagrant provision(甚至不使用envAnsible 中的变量),我得到以下信息:
$ vagrant provision
==> default: Running provisioner: ansible_local...
default: Running ansible-playbook...
ERROR: Expecting property name: line 1 column 2 (char 1)
Ansible failed to complete successfully. Any error output should be …Run Code Online (Sandbox Code Playgroud) 我正在尝试编写一个程序,在Main类中可以启动未知数量的新线程.每个线程依次调用Singleton Copier类,该类应该调用文件传输操作.
我的目标是,无论线程请求数量多少,都要将并发传输的数量限制为2次传输,所以我想用它来解决它Semaphore.我的问题是,似乎线程一个接一个地运行而不是并发运行.
这是我试图做的:
public class Copier {
private static final int POOL_SIZE = 2;
private static volatile Copier instance = null;
private static Semaphore semaphore;
private Copier() {
}
public static Copier getInstance() {
if (instance == null) {
synchronized (Copier.class) {
if (instance == null) {
instance = new Copier();
semaphore = new Semaphore(POOL_SIZE);
}
}
}
return instance;
}
public void fileTransfer(CopyThread copyThread) {
try {
semaphore.acquire();
System.out.println("Running thread..."); …Run Code Online (Sandbox Code Playgroud) 该Site课程由外部团队提供给我,有一个私人的构造函数。
public class Site
{
int id;
String brand;
private Site(int id, String brand)
{
this.id = id;
this.brand = brand;
}
}
Run Code Online (Sandbox Code Playgroud)
SiteUtil类(由团队控制)是
public class SiteUtil
{
public static Site getSite()
{
Site site;
//Logic
return site;
}
}
Run Code Online (Sandbox Code Playgroud)
getSite()函数对其应用逻辑的数据需要网络调用,因此需要对其进行模拟。它目前没有设置器(也许是为了保持与数据源的一致性,不太确定)
我如下模拟
Site mockSite = new Site(1,"Google");
PowerMockito.when(SiteUtil.getSite(1)).thenReturn(mockSite);
Run Code Online (Sandbox Code Playgroud)
当我使用公共构造函数时,上面的代码当然会编译。我读的解决方案是模拟Site对象的私有构造函数。但是,我对该方法一无所知(第一次编写单元测试!)
我需要线程安全且高效的LRU缓存实现代码.下面的代码不是线程安全的.是否可以使用增强此代码ConcurrentHashMap.提前致谢.
private class LruCache<A, B> extends LinkedHashMap<A, B> {
private final int maxEntries;
public LruCache(final int maxEntries) {
super(maxEntries + 1, 1.0f, true);
this.maxEntries = maxEntries;
}
@Override
protected boolean removeEldestEntry(final Map.Entry<A, B> eldest) {
return super.size() > maxEntries;
}
}
Run Code Online (Sandbox Code Playgroud) 我有这个代码来获取地图:
List<MyObject> myList = myMethod.getList();
myList.stream().collect(
Collectors.toMap(
MyObject::getKey,
MyObject::getValue,
(e1, e2) -> {
System.out.println("Duplicate keys !!!");
return e1;
},
LinkedHashMap::new
)
);
Run Code Online (Sandbox Code Playgroud)
如何用重复键打印消息"重复键"?
我想使用JavaPoet生成一个类型为literal的注释作为值.例如:
@AutoService(MyService.class)
public class GeneratedClass implements MyService {
}
Run Code Online (Sandbox Code Playgroud)
我已经尝试了所有我能想到的选项,但都没有用:
TypeSpec.classBuilder("GeneratedClass")
.addModifiers(Modifier.PUBLIC)
.addSuperinterface(MyService.class)
.addAnnotation(
AnnotationSpec.builder(AutoService.class).addMember(
"value", "$L", MyService.class
).build()
)
Run Code Online (Sandbox Code Playgroud)
使用$L生成interface MyService
使用$T生成my.package.MyService,这是接近但错过了.class部分.
使用$N给出错误:expected name but was my.package.MyService
如何将其生MyService.class成为注释值?
我想在下面的byte []中获取/转换Arraylist的值是我的代码
final ArrayList<Object> imglists = new ArrayList<Object>();
Run Code Online (Sandbox Code Playgroud)
这是我在这个arraylist m中的对象的arraylist,以字节的形式存储图像的值
for (int i=0; i<mPlaylistVideos.size();i++) {
holder.mThumbnailImage.buildDrawingCache();
Bitmap bitmap= holder.mThumbnailImage.getDrawingCache();
ByteArrayOutputStream bs = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 50, bs);
byte[] rough = bs.toByteArray();
imglists.add(i,rough);
}
Run Code Online (Sandbox Code Playgroud)
我试图从arraylist获取特定值并将其存储在byte []中这就是我想要做的事情
byte[] value=imglists.get(2);
Run Code Online (Sandbox Code Playgroud)
我找不到将Object的Arraylist转换为byte []的完整答案我知道Arraylist不支持原始数据类型(即byte)
我在一个类中有一个方法,它实例化一个静态类实例并对其调用操作。
public class SomeClass {
public void someMethod() {
MyClass.MyStaticClass myStaticClassInstance =
new MyClass.MyStaticClass( arg1, arg2, arg3 );
myStaticClassInstance.callSomeMethod();
}
}
public class MyClass {
public static class MyStaticClass {
public MyStaticClass( Object arg1, Object arg2, Object arg3 ) {
}
public void callSomeMethod() {
}
}
}
Run Code Online (Sandbox Code Playgroud)
如何模拟静态类实例化,以便我可以在callSomeMethod()不通过静态类构造函数的情况下进行模拟?
java ×9
android ×1
ansible ×1
arraylist ×1
collectors ×1
concurrency ×1
enums ×1
generics ×1
java-8 ×1
javapoet ×1
mockito ×1
powermock ×1
powermockito ×1
semaphore ×1
unit-testing ×1
vagrant ×1