java-dev
70
总安装量
70
周安装量
#3148
全站排名
安装命令
npx skills add https://github.com/doccker/cc-use-exp --skill java-dev
Agent 安装分布
opencode
44
claude-code
42
gemini-cli
38
codex
35
antigravity
27
Skill 文档
Java å¼åè§è
åèæ¥æº: Google Java Style Guideãé¿éå·´å·´ Java å¼åæå
å·¥å ·é¾
# Maven
mvn clean compile # ç¼è¯
mvn test # è¿è¡æµè¯
mvn verify # è¿è¡æææ£æ¥
# Gradle
./gradlew build # æå»º
./gradlew test # è¿è¡æµè¯
å½å约å®
| ç±»å | è§å | ç¤ºä¾ |
|---|---|---|
| å å | å ¨å°åï¼ååå转 | com.example.project |
| ç±»å | 大驼峰ï¼åè¯/åè¯çè¯ | UserService, HttpClient |
| æ¹æ³å | å°é©¼å³°ï¼å¨è¯å¼å¤´ | findById, isValid |
| 常é | å ¨å¤§åä¸å线åé | MAX_RETRY_COUNT |
| å¸å°è¿åå¼ | is/has/can åç¼ | isActive(), hasPermission() |
ç±»æå顺åº
public class Example {
// 1. éæå¸¸é
public static final String CONSTANT = "value";
// 2. éæåé
private static Logger logger = LoggerFactory.getLogger(Example.class);
// 3. å®ä¾åé
private Long id;
// 4. æé 彿°
public Example() { }
// 5. éææ¹æ³
public static Example create() { return new Example(); }
// 6. å®ä¾æ¹æ³ï¼å
Œ
± â ç§æï¼
public void doSomething() { }
private void helperMethod() { }
// 7. getter/setterï¼æä½¿ç¨ Lombokï¼
}
å¼å¸¸å¤ç
// â
å¥½ï¼æè·å
·ä½å¼å¸¸ï¼æ·»å ä¸ä¸æ
try {
user = userRepository.findById(id);
} catch (DataAccessException e) {
throw new ServiceException("Failed to find user: " + id, e);
}
// â
好ï¼èµæºèªå¨å
³é
try (InputStream is = new FileInputStream(file)) {
// 使ç¨èµæº
}
// â å·®ï¼æè·è¿å®½
catch (Exception e) { e.printStackTrace(); }
空å¼å¤ç
// â
ä½¿ç¨ Optional
public Optional<User> findById(Long id) {
return userRepository.findById(id);
}
// â
åæ°æ ¡éª
public void updateUser(User user) {
Objects.requireNonNull(user, "user must not be null");
}
// â
å®å
¨ç空å¼å¤ç
String name = Optional.ofNullable(user)
.map(User::getName)
.orElse("Unknown");
å¹¶åç¼ç¨
// â
ä½¿ç¨ ExecutorService
ExecutorService executor = Executors.newFixedThreadPool(10);
Future<Result> future = executor.submit(() -> doWork());
// â
ä½¿ç¨ CompletableFuture
CompletableFuture<User> future = CompletableFuture
.supplyAsync(() -> findUser(id))
.thenApply(user -> enrichUser(user));
// â å·®ï¼ç´æ¥å建线ç¨
new Thread(() -> doWork()).start();
æµè¯è§è (JUnit 5)
class UserServiceTest {
@Test
@DisplayName("æ ¹æ® ID æ¥æ¾ç¨æ· - ç¨æ·å卿¶è¿åç¨æ·")
void findById_whenUserExists_returnsUser() {
// given
when(userRepository.findById(1L)).thenReturn(Optional.of(expected));
// when
Optional<User> result = userService.findById(1L);
// then
assertThat(result).isPresent();
assertThat(result.get().getName()).isEqualTo("test");
}
}
Spring Boot è§è
// â
æé 彿°æ³¨å
¥
@Service
@RequiredArgsConstructor
public class UserService {
private final UserRepository userRepository;
private final EmailService emailService;
}
// â
REST Controller
@RestController
@RequestMapping("/api/users")
public class UserController {
@GetMapping("/{id}")
public ResponseEntity<UserDto> findById(@PathVariable Long id) {
return userService.findById(id)
.map(ResponseEntity::ok)
.orElse(ResponseEntity.notFound().build());
}
}
æ§è½ä¼å
| é·é± | è§£å³æ¹æ¡ |
|---|---|
| N+1 æ¥è¯¢ | ä½¿ç¨ JOIN FETCH ææ¹éæ¥è¯¢ |
| å¾ªç¯æ¼æ¥å符串 | ä½¿ç¨ StringBuilder |
| é¢ç¹è£ ç®±æç®± | 使ç¨åå§ç±»åæµ |
| æªæå®éååå§å®¹é | new ArrayList<>(size) |
æ¥å¿è§è
// â
忰忥å¿
log.debug("Finding user by id: {}", userId);
log.info("User {} logged in successfully", username);
log.error("Failed to process order {}", orderId, exception);
// â å·®ï¼åç¬¦ä¸²æ¼æ¥
log.debug("Finding user by id: " + userId);
详ç»åè
| æä»¶ | å 容 |
|---|---|
references/java-style.md |
å½å约å®ãå¼å¸¸å¤çãSpring Bootãæµè¯è§è |
references/collections.md |
ä¸å¯åéåï¼Guavaï¼ãå符串åå² |
references/concurrency.md |
çº¿ç¨æ± é ç½®ãCompletableFuture è¶ æ¶ |
references/code-patterns.md |
å«è¯å¥ãæä¸¾ä¼åãçç¥å·¥åæ¨¡å¼ |
ð æ¬åå¤éµå¾ªï¼
java-dev– [å ·ä½ç« è]