我想访问;标题“&引用;相册;,及;“艺术家”;变量在另一个类中,需要是一个什么来执行此操作?(在intellij中用javafx编写)
这是包含变量的类我想访问;标题“&引用;相册;,及;“艺术家”;变量在另一个类中,需要是一个什么来执行此操作?(在intellij中用javafx编写),java,class,variables,javafx,Java,Class,Variables,Javafx,这是包含变量的类 package sample; import java.io.*; public class Main { static String title; static String artist; static String album; public static void main(String[] args) { cheese(); String a=title; System.out.pr
package sample;
import java.io.*;
public class Main {
static String title;
static String artist;
static String album;
public static void main(String[] args) {
cheese();
String a=title;
System.out.println(a);
}
public static String cheese(){
try {
File song = new File("C:\\Users\\TheFishMoustache\\Music\\Indochine - L'aventurier.mp3");
FileInputStream file = new FileInputStream(song);
int size = (int) song.length();
file.skip(size - 128);
byte[] last128 = new byte[128];
file.read(last128);
String id3 = new String(last128);
String tag = id3.substring(0, 3);
if (tag.equals("TAG")) {
title = id3.substring(3, 32);
artist = id3.substring(33, 62);
album = id3.substring(63, 91);
} else {
System.out.println(" does not contain information.");
}
file.close();
} catch (Exception e) {
System.out.println("Error - " + e.toString());
}
return (title+album+artist);
}
}
在另一个类中,我有一个片段:
@FXML public TableView<Song> musiclist;
private ObservableList<Song> songs() {
List list = new ArrayList();
list.add(new Song("a","b","c"));
ObservableList<Song> info = FXCollections.observableArrayList(list);
return info;
}
@FXML public TableView musiclist;
私家歌曲(){
列表=新的ArrayList();
增加(新歌(“a”、“b”、“c”);
ObservableList info=FXCollections.observableArrayList(列表);
退货信息;
}
如果我想用“title”、“author”和“artist”变量替换“a”、“b”和“c”,那么我需要什么代码来执行此操作?首先,您可以创建一个新类
public class SongLoader {
private SongLoader() { }
public static Song fromFile(String fileName) {
File song = new File(fileName);
String title, album, artist;
// Your code here
return new Song(title, album, artist);
}
}
然后你的主要任务就是加载这个文件
public class Main {
public static void main(String[] args) {
Song s = SongLoader
.fromFile("C:\\Users\\TheFishMoustache\\Music\\Indochine - L'aventurier.mp3");
// For example, print values
System.out.println(song.title);
}
我想用“title”、“author”和“artist”变量替换“a”、“b”和“c”
package sample;
import java.io.*;
public class Main {
static String title;
static String artist;
static String album;
public static void main(String[] args) {
cheese();
String a=title;
System.out.println(a);
}
public static String cheese(){
try {
File song = new File("C:\\Users\\TheFishMoustache\\Music\\Indochine - L'aventurier.mp3");
FileInputStream file = new FileInputStream(song);
int size = (int) song.length();
file.skip(size - 128);
byte[] last128 = new byte[128];
file.read(last128);
String id3 = new String(last128);
String tag = id3.substring(0, 3);
if (tag.equals("TAG")) {
title = id3.substring(3, 32);
artist = id3.substring(33, 62);
album = id3.substring(63, 91);
} else {
System.out.println(" does not contain information.");
}
file.close();
} catch (Exception e) {
System.out.println("Error - " + e.toString());
}
return (title+album+artist);
}
}
那没有道理
“a”、“b”和“c”被设置到Song
对象的那些值中
List<Song> list = new ArrayList<>();
list.add(new Song("title","author","artist"));
实现这一点的最简单方法,也是公认的最佳实践,是对变量引用使用setter和getter 在
Main.java
中,将变量声明为private
:
private String title;
private String artist;
private String album;
同样在Main.java
中,提供用于访问这些变量的公共方法。这些被称为setter和getter,因为它们要么设置,要么获取该类外部的值
基本设定器
private void setTitle(String title) {
this.title = title;
}
private String getTitle() {
return this.title;
}
基本Getter
private void setTitle(String title) {
this.title = title;
}
private String getTitle() {
return this.title;
}
然后,从另一个类中,只需调用适当的getter即可检索这些值:
list.add(new Song(
mainClass.getTitle();
mainClass.getArtist();
mainClass.getAlbum();
));
但是,我建议您对面向对象编程的基础知识多做一些研究,因为要想成功,这个概念是绝对必须掌握的
顺便说一句,IntelliJ可以为您创建setter和getter。只需将光标放在文件中所需的位置,然后按
Alt Insert
。同样,我建议在依赖IntelliJ创建代码之前,先了解IntelliJ创建代码的方式和原因。避免使用静态变量来传递数据。另外,因为您使用了@FXML
注释,所以这个问题可能就是您实际需要的:但是如果我不使用,那么我就不能在Main()中调用cheese()类中使用,因为两者都在static@Némo Faucher,你有多个主类吗?@NémoFaucher你可以学习更多关于OOP和Java的知识,但是new main().cheese()
将允许您在方法不是静态的情况下调用该方法