Ⅰ jsonobject怎么定义枚举android
@JsonValue
public Map<String, Object> toMap() {
Map<String, Object> map = new HashMap<>();
map.put("name", getName());
map.put("code", getCode());
return map;
}
Ⅱ 为什么说android使用enum效率低,浪费方法数
现在不会了,新版本JDK做了优化,效率高了很多,而且使用也变方便了。
Ⅲ Android怎么获取一个包下的全部类名
您好,我在别的论坛也看到您的问题,很高兴为您解答:
/**
* 从包package中获取所有的Class
*
* @param pack
* @return
*/
public static Set<Class<?>> getClasses(Package pack) {
// 第一个class类的集合
Set<Class<?>> classes = new LinkedHashSet<Class<?>>();
// 是否循环迭代
boolean recursive = true;
// 获取包的名字 并进行替换
String packageName = pack.getName();
String packageDirName = packageName.replace('.', '/');
// 定义一个枚举的集合 并进行循环来处理这个目录下的things
Enumeration<URL> dirs;
try {
dirs = Thread.currentThread().getContextClassLoader().getResources(
packageDirName);
// 循环迭代下去
while (dirs.hasMoreElements()) {
// 获取下一个元素
URL url = dirs.nextElement();
// 得到协议的名称
String protocol = url.getProtocol();
// 如果是以文件的形式保存在服务器上
if ("file".equals(protocol)) {
// 获取包的物理路径
String filePath = URLDecoder.decode(url.getFile(), "UTF-8");
// 以文件的方式扫描整个包下的文件 并添加到集合中
(packageName, filePath,
recursive, classes);
} else if ("jar".equals(protocol)) {
// 如果是jar包文件
// 定义一个JarFile
JarFile jar;
try {
// 获取jar
jar = ((JarURLConnection) url.openConnection())
.getJarFile();
// 从此jar包 得到一个枚举类
Enumeration<JarEntry> entries = jar.entries();
// 同样的进行循环迭代
while (entries.hasMoreElements()) {
// 获取jar里的一个实体 可以是目录 和一些jar包里的其他文件 如META-INF等文件
JarEntry entry = entries.nextElement();
String name = entry.getName();
// 如果是以/开头的
if (name.charAt(0) == '/') {
// 获取后面的字符串
name = name.substring(1);
}
// 如果前半部分和定义的包名相同
if (name.startsWith(packageDirName)) {
int idx = name.lastIndexOf('/');
// 如果以"/"结尾 是一个包
if (idx != -1) {
// 获取包名 把"/"替换成"."
packageName = name.substring(0, idx)
.replace('/', '.');
}
// 如果可以迭代下去 并且是一个包
if ((idx != -1) || recursive) {
// 如果是一个.class文件 而且不是目录
if (name.endsWith(".class")
&& !entry.isDirectory()) {
// 去掉后面的".class" 获取真正的类名
String className = name.substring(
packageName.length() + 1, name
.length() - 6);
try {
// 添加到classes
classes.add(Class
.forName(packageName + '.'
+ className));
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
} catch (IOException e) {
e.printStackTrace();
}
return classes; }
/**
* 以文件的形式来获取包下的所有Class
*
* @param packageName
* @param packagePath
* @param recursive
* @param classes
*/
public static void (String packageName,
String packagePath, final boolean recursive, Set<Class<?>> classes) {
// 获取此包的目录 建立一个File
File dir = new File(packagePath);
// 如果不存在或者 也不是目录就直接返回
if (!dir.exists() || !dir.isDirectory()) {
return;
}
// 如果存在 就获取包下的所有文件 包括目录
File[] dirfiles = dir.listFiles(new FileFilter() {
// 自定义过滤规则 如果可以循环(包含子目录) 或则是以.class结尾的文件(编译好的java类文件)
public boolean accept(File file) {
return (recursive && file.isDirectory())
|| (file.getName().endsWith(".class"));
}
});
// 循环所有文件
for (File file : dirfiles) {
// 如果是目录 则继续扫描
if (file.isDirectory()) {
(packageName + "."
+ file.getName(), file.getAbsolutePath(), recursive,
classes);
} else {
// 如果是java类文件 去掉后面的.class 只留下类名
String className = file.getName().substring(0,
file.getName().length() - 6);
try {
// 添加到集合中去
classes.add(Class.forName(packageName + '.' + className));
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}
}
}
转载,仅供参考。
如果我的回答没能帮助您,请继续追问。
Ⅳ Android 怎么自定义枚举类型的值
static final通常跟的是一个int类型的常数,所以有时候可以用int型代替枚举 在有些时候需要输出这个枚举量的名字(比如January),上面的方法输出的是int值,用类的话可以把名字一起输出 总的来说前者消耗资源比较少,后者更符合枚举的定义 枚举的确是一个类,在JDK1.4及以前,没有enum这个用法,那时候都是使用类来建立的,在《Java编程思想》中介绍了一类写法(详见第三版的章节8.1.3群组常量);JDK5以后,enum被引入,本质上就是一个类,所以可以被继承,总体思路和第三版这个写法类似,只是换了个名字(《Java编程思想》第四版第19章专门讲这个) 补充:我把早期的例子给出吧,你看一下,这就是早期的枚举的方法: public final class Month{ private String name; private Month (String nm){name=nm;} public String toString(){return name;} public static final Month JAN=new Month("January"), FEB=new Month("February"), MAR=new Month("March"), APR=new Month("April"), MAY=new Month("May"), JUN=new Month("June"), JUL=new Month("July"), AUG=new Month("August"), SEP=new Month("September"), OCT=new Month("October"), NOV=new Month("November"), DEC=new Month("December"); public static final Month month[]={ JAN,FEB,MAR,APR,MAY,JUN,JUL,AUG,SEP,OCT,NOV,DEC }; public static final Month number(int ord){ return month[ord-1]; } //main public static void main(String args[]){ Month m=Month.JAN; System.out.println(m); m=Month.number(12); System.out.println(m); System.out.println(m==Month.DEC); System.out.println(m.equals(Month.DEC)); System.out.println(Month.month[3]); System.out.println(Month.APR); } }
Ⅳ 自定义控件属性里面有枚举类型,通过typedarray怎么获取啊
DWORD WINAPI FunProc1(LPVOID lpParameter);
DWORD WINAPI FunProc2(LPVOID lpParameter);
int ticket=100;
HANDLE g_hEvent; //定义事件对象
void main()
Ⅵ android 静态常量和枚举哪个好
常量是直接编译在代码中的,而枚举则是一种类,你可以通过反射根据值反查出它的枚举形式是什么。
枚举定义了值的范围,但是常量没有。所以要根据你的实际情况选择。
比如你有一个变量,是中国所有的省,那么最好用枚举,因为这些是固定不变的。在代码里使用的时候更方便,也易懂。
Ⅶ android平台 usb设备开发 动态枚举pc端的usb端口
有现成的,希望对你有所帮助
// stdafx.h : include file for standard system include files,
// or project specific include files that are used frequently, but
// are changed infrequently
//
#pragma once
#ifndef _WIN32_WINNT // Allow use of features specific to Windows XP or later.
#define _WIN32_WINNT 0x0501 // Change this to the appropriate value to target other versions of Windows.
#endif
#include <stdio.h>
#include <tchar.h>
// TODO: reference additional headers your program requires here
// EnumDevice.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <guiddef.h>
#include <windows.h>
#include <setupapi.h>
#include <vector>
#include <iostream>
using namespace std;
//U盘 interface class GUID
GUID IID_CLASS_WCEUSBS =;
BOOL SearchDevice(vector<wstring> &vDevicePath)
{
BOOL bRes = FALSE;
LPGUID pInterfaceGuid = &IID_CLASS_WCEUSBS;
HDEVINFO hDeviceInfo = SetupDiGetClassDevs( pInterfaceGuid,
NULL,
NULL,
DIGCF_PRESENT | DIGCF_DEVICEINTERFACE);
if (INVALID_HANDLE_VALUE == hDeviceInfo)
{
goto Exit;
}
// enum device interface
SP_DEVICE_INTERFACE_DATA spDevInterData; //a structure of device interface data
memset(&spDevInterData, 0x00, sizeof(SP_DEVICE_INTERFACE_DATA));
spDevInterData.cbSize = sizeof(SP_DEVICE_INTERFACE_DATA);
DWORD dwIndex = 0;
while (TRUE)
{
if (!SetupDiEnumDeviceInterfaces( hDeviceInfo,
NULL,
pInterfaceGuid,
dwIndex,
&spDevInterData))
{
if (ERROR_NO_MORE_ITEMS == GetLastError())
{
OutputDebugStringW(L"No more interface");
}
else
{
OutputDebugStringW(L"SetupDiEnumDeviceInterfaces Error");
}
goto Exit;
}
// get length of interface detail info
DWORD dwRequiredLength = 0; //for getting length of inter face detail data
if (!( hDeviceInfo,
&spDevInterData,
NULL,
0,
&dwRequiredLength,
NULL))
{
if (ERROR_INSUFFICIENT_BUFFER != GetLastError())
{
OutputDebugStringW(L"calculate require length");
//goto Exit;
}
}
// get interface detail info
PSP_DEVICE_INTERFACE_DETAIL_DATA pSpDIDetailData; //a pointer to interface detail data
pSpDIDetailData = NULL;
pSpDIDetailData = (PSP_DEVICE_INTERFACE_DETAIL_DATA)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, dwRequiredLength);
if(NULL == pSpDIDetailData)
{
OutputDebugStringW(L"HeapAlloc Memory Failed");
if (!SetupDiDestroyDeviceInfoList(hDeviceInfo))
{
OutputDebugStringW(L"SetupDiDestroyDeviceInfoList Error");
}
goto Exit;
}
pSpDIDetailData->cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA);
if (!( hDeviceInfo,
&spDevInterData,
pSpDIDetailData,
dwRequiredLength,
&dwRequiredLength,
NULL))
{
OutputDebugStringW(L" Error");
goto Exit;
}
wstring wcsDevicePath = pSpDIDetailData->DevicePath;
vDevicePath.push_back(wcsDevicePath);
if (NULL != pSpDIDetailData)
{
HeapFree(GetProcessHeap(), 0, pSpDIDetailData);
pSpDIDetailData = NULL;
}
dwIndex++;
}
if (!SetupDiDestroyDeviceInfoList(hDeviceInfo))
{
OutputDebugStringW(L"SetupDiDestroyDeviceInfoList Error");
}
bRes = TRUE;
Exit:
return bRes;
}
int _tmain(int argc, _TCHAR* argv[])
{
vector<wstring> vDevicePath;
SearchDevice(vDevicePath);
vector<wstring>::iterator iter;
for (iter = vDevicePath.begin(); iter != vDevicePath.end(); ++iter)
{
wcout << (*iter).c_str() << endl;
}
system("pause");
return 0;
}
// stdafx.cpp : source file that includes just the standard includes
// EnumDevice.pch will be the pre-compiled header
// stdafx.obj will contain the pre-compiled type information
#include "stdafx.h"
// TODO: reference any additional headers you need in STDAFX.H
// and not in this file
Ⅷ Android 怎么自定义枚举类型的值
在已知可能输入值情况下,我们常常会用到枚举类型。在java中,怎么自定义枚举类型的值呢?请参考如下代码:
[java] view plain
public enum Point {
Satisfaction(1), Dissatisfied(-1);
private final int val;
private Point(int value) {
val = value;
}
public int getValue() {
return this.val;
}
}
在调用的时候,可以用Point.Satisfaction 和Point.Dissatisfied,如下所示:
[java] view plain
Judge(mContenxt, mGuid, Point.Dissatisfied);
在方法Judge中,可以用getValue获取枚举的值。如下所示:
[java] view plain
public void Judge(Context context,String logGuid, Point point){
int point = point.getValue();
}
Ⅸ 用java写一个枚举类程序
packagecom.school.stereotype;
/**
*活动枚举类型
*@authorQiXuan.Chen
*/
publicenumEventStatus{
/**
*未发布。
*/
DRAFT("DRAFT","未发布"),
/**
*已发布。
*/
PUBLISHED("PUBLISHED","已发布");
/**
*活动状态的值。
*/
privateStringvalue;
/**
*活动状态的中文描述。
*/
privateStringtext;
/**
*@paramstatus活动状态的值
*@paramdesc活动状态的中文描述
*/
privateEventStatus(Stringstatus,Stringdesc){
value=status;
text=desc;
}
/**
*@return当前枚举对象的值。
*/
publicStringgetValue(){
returnvalue;
}
/**
*@return当前状态的中文描述。
*/
publicStringgetText(){
returntext;
}
/**
*根据活动状态的值获取枚举对象。
*
*@paramstatus活动状态的值
*@return枚举对象
*/
(Stringstatus){
EventStatus[]allStatus=EventStatus.values();
for(EventStatusws:allStatus){
if(ws.getValue().equalsIgnoreCase(status)){
returnws;
}
}
("status值非法,没有符合课程状态的枚举对象");
}
}
Ⅹ android intent 可以传递enum 吗
可以使用序列化对象保存enum对象,如下内容:
bundle.putSerializable(String key , Seralizable data) //向Bundle放入一个可序列化的对象,例如:enum123123
示例:
Intent intent = new Intent(MainActivity.this,OtherActivity.class);
Bundle bundle = new Bundle();
bundle.putSerializable("enum", YourEnum.TYPE1);
intent.putExtras(bundle); //将bundle传入intent中。12341234
get
bundle.getXxx(String key);//从Bundle取出Int、String等各种类型的数据
bundle.gutSerializable(String key ) //从Bundle取出一个可序列化的对象,例如:enum1212
示例:
Intent intent = getIntent();
Bundle bundle = intent.getExtras();
YourEnum TYPE1 = (YourEnum ) bundle.get("enum");//这时使用get()取出一个Object类型的对象,可以进行强制类型转化。