দরকারী Eclipse জাভা কোড টেম্পলেট [বন্ধ] সন্ধান করা


517

আপনি Eclipse এর মাধ্যমে বিভিন্ন জাভা কোড টেম্পলেট তৈরি করতে পারেন

উইন্ডো> পছন্দসমূহ> জাভা> সম্পাদক> টেম্পলেট

যেমন

sysout এতে প্রসারিত হয়েছে:

System.out.println(${word_selection}${});${cursor}

এটি sysoutঅনুসরণ করে টাইপ করে এটি সক্রিয় করতে পারেনCTRL+SPACE

আপনি বর্তমানে কোন জাভা কোড টেম্পলেট ব্যবহার করেন? এর নাম এবং বিবরণ অন্তর্ভুক্ত করুন এবং কেন এটি দুর্দান্ত।

আমি অন্তর্নির্মিত বিদ্যমান বৈশিষ্ট্যটির পরিবর্তে কোনও টেম্পলেটটির মূল / উপন্যাস ব্যবহারের সন্ধান করছি।

  • লগ 4 জে লগার তৈরি করুন
  • প্রদর্শন থেকে swt রঙ পান
  • সিঙ্কেক্সেক - একলিপস ফ্রেমওয়ার্ক
  • সিঙ্গলটন প্যাটার্ন / এনাম সিঙ্গলটন জেনারেশন
  • ফাইল পড়া
  • const
  • Traceout
  • ফর্ম্যাট স্ট্রিং
  • মন্তব্য কোড পর্যালোচনা
  • স্ট্রিং ফর্ম্যাট
  • শেষ পর্যন্ত লক চেষ্টা করুন
  • বার্তা ফর্ম্যাট i18n এবং লগ
  • Equalsbuilder
  • Hashcodebuilder
  • স্প্রিং অবজেক্ট ইনজেকশন
  • ফাইলআউটপুট স্ট্রিম তৈরি করুন

5
এমন কোনও কি আছে যে সমস্ত সম্ভাব্য কেস নিয়ে এনুম থেকে একটি সুইচ স্টেটমেন্ট জেনারেট করে? আমি জানি আপনি এটি CTRL + 1 দিয়ে করতে পারেন, তবে আমি বরং cmd সমাপ্তি ব্যবহার করব।
গ্রিনকিউ

4
আপনি কি ব্যাখ্যা করতে পারবেন System.out.println(${word_selection}${});${cursor}? মনে হচ্ছে কোনও শব্দ বাছাই করার উপায় আছে এবং একটি sysoutকলের মধ্যে এটি স্বয়ংক্রিয়ভাবে encase করা আছে , আমি ঠিক আছি? কিভাবে?
কোডি বাগস্টেইন

3
আপনি সিউসআউট কল দ্বারা ঘিরে থাকা শব্দটি হাইলাইট করুন এবং সিটিআরএল-স্পেস টিপুন (তারপরে টেমপ্লেটের নামে টাইপ করে যদি আপনার কাছে প্রচুর হাইলাইট সচেতন টেমপ্লেট থাকে)
জেআরডিডার

@JReader $ {} কী করে?
রোল্যান্ড

উত্তর:


423

নিম্নলিখিত কোড টেম্পলেটগুলি উভয়ই লগার তৈরি করবে এবং প্রয়োজনে সঠিক আমদানি তৈরি করবে।

SLF4J

${:import(org.slf4j.Logger,org.slf4j.LoggerFactory)}
private static final Logger LOG = LoggerFactory.getLogger(${enclosing_type}.class);

লগ 4 জ 2

${:import(org.apache.logging.log4j.LogManager,org.apache.logging.log4j.Logger)} 
private static final Logger LOG = LogManager.getLogger(${enclosing_type}.class); 

Log4J

${:import(org.apache.log4j.Logger)}
private static final Logger LOG = Logger.getLogger(${enclosing_type}.class);

উত্স

জুলাই

${:import(java.util.logging.Logger)}
private static final Logger LOG = Logger.getLogger(${enclosing_type}.class.getName());

31
কুল। আমি import {: আমদানি ...} জিনিস সম্পর্কে জানতাম না।
জেস্পেআর

3
আমি মনে করি $ {: আমদানি ...} কেবলমাত্র গ্রহতের নতুন সংস্করণগুলিতে কাজ করে। আমি ৩.২ এর সাথে আটকে আছি এবং এটি আমার পক্ষে কাজ করে না।
অ্যাডাম ক্রুম

আমার সংস্করণেও নেই (3.5)। কেউ কি জানেন যে এটি কোন সংস্করণে চালু হয়েছিল?
ফিনিউ

5
আমি এটা ভালোবাসি! তবে আমি লগার ঘোষণার নীচে {{আমদানি ... put রেখেছি, যাতে এটি কোনও নতুন লাইন যুক্ত না করে।
দারিও সাইডল

1
@ টিএমএস - যোগ হয়েছে, ধন্যবাদ!
রবার্ট মুন্তানু

49

কিছু অতিরিক্ত টেমপ্লেট এখানে: লিঙ্ক আই - লিঙ্ক II

আমার এটা ভাল লেগেছে:

ফাইল পড়া

 ${:import(java.io.BufferedReader,  
           java.io.FileNotFoundException,  
           java.io.FileReader,  
           java.io.IOException)}  
 BufferedReader in = null;  
 try {  
    in = new BufferedReader(new FileReader(${fileName}));  
    String line;  
    while ((line = in.readLine()) != null) {  
       ${process}  
    }  
 }  
 catch (FileNotFoundException e) {  
    logger.error(e) ;  
 }  
 catch (IOException e) {  
    logger.error(e) ;  
 } finally {  
    if(in != null) in.close();  
 }  
 ${cursor} 

আপডেট : এই টেমপ্লেটের জাভা 7 সংস্করণটি হ'ল:

${:import(java.nio.file.Files,
          java.nio.file.Paths,
          java.nio.charset.Charset,
          java.io.IOException,
          java.io.BufferedReader)}
try (BufferedReader in = Files.newBufferedReader(Paths.get(${fileName:var(String)}),
                                                 Charset.forName("UTF-8"))) {
    String line = null;
    while ((line = in.readLine()) != null) {
        ${cursor}
    }
} catch (IOException e) {
    // ${todo}: handle exception
}

48
আমি মনে করি এটি একটি পদ্ধতির জন্য :)
বেনমুরফি

3
ত্রুটি আমি মনে করি আপনি বিন্দুটি মিস করেছেন ... এই বলে যে আপনার বক্তব্যটি আমি আসলে জানি না ... এটি কোড জেনারেশনটি মডুলারিটির নয় ...
জন

20
আমি মনে করি যে বক্তব্যটি হ'ল কোনও টেম্পলেটে এই কোডটি যুক্ত করা খুব সাধারণ পরিস্থিতির জন্য কাট-পেস্ট প্রোগ্রামিং।
স্কট ম্যাকআইন্টির

5
হ্যাঁ, কোডের ব্লকগুলি আটকে দেওয়ার পরিবর্তে কোনও ফাইল পড়তে আপনার কোনও ইউটিলিটি পদ্ধতি ব্যবহার করা উচিত। নিজেই একটি পদ্ধতি লিখুন, বা অ্যাপাচি কমন্স-আইও আইউইটিস ব্যবহার করুন। তবুও, আপনি যদি বিভিন্ন ক্লাসপথ দিয়ে প্রচুর নিক্ষেপ প্রকল্প করেন তবে একটি ফাইল পড়ার জন্য আপনার ইউটিলিটি ক্লাসে জেআর যুক্ত করা বা লিঙ্ক যুক্ত করা ব্যথা হতে পারে। কখনও কখনও আপনার কেবল কিছু নিক্ষিপ্ত কোড লিখতে হবে যা কোনও ফাইল পড়ে এবং আপনার জীবন নিয়ে চালিয়ে যায়।
মাইক ক্লার্ক

1
জাভা 7 এ, পছন্দ করা StandardCharsets.UTF_8উপর Charset.forName("UTF-8")
মাইক ক্লার্ক

33

একটি স্ট্রিং ফর্ম্যাট করুন

ম্যাসেজফর্ম্যাট - একটি বার্তা ফর্ম্যাট দিয়ে নির্বাচনকে ঘিরে।

 ${:import(java.text.MessageFormat)} 
 MessageFormat.format(${word_selection}, ${cursor})

এটি আমাকে একটি স্ট্রিংয়ে একটি কার্সার স্থানান্তর করতে, পুরো স্ট্রিংয়ে সিলেকশনটি প্রসারিত করতে (শিফট-অল্ট-আপ), তারপরে Ctrl- স্পেস দুটি বার করতে দেয়।

নির্বাচনটি লক করুন

লক - চূড়ান্তভাবে নির্বাচিত লাইনগুলিকে চারপাশে চেষ্টা করে শেষ পর্যন্ত লক করুন। লক ভেরিয়েবলের উপস্থিতি অনুমান করুন।

${lock}.acquire();
try {
    ${line_selection}
    ${cursor}
} finally {
    ${lock}.release();
}

এনবি ${line_selection}টেম্পলেটগুলি সারাউন্ড উইথ মেনুতে প্রদর্শিত হবে (আল্ট-শিফট-জেড)।


আমি লগ স্টেটমেন্টগুলির সাথে মিলিয়ে এটি ব্যবহার করি: logger.info (ম্যাসেজফরম্যাট.ফর্ম্যাট (_ {word_selection}, {{কার্সার}));
পিয়ের হেনরি

লকগুলি অর্জন এবং ছেড়ে দেওয়ার জন্য পদ্ধতিগুলি বলা হয় lockএবং unlockacquireএবং releaseসেমোফোরগুলির জন্য ব্যবহৃত হয় এবং চেষ্টা-অবরুদ্ধ ব্লকের মধ্যে তাদের ব্যবহার লকগুলির মতোই দৃ strongly়ভাবে পরামর্শ দেওয়া হয় না
মার্কো ল্যাকোভিচ

Ctrl + Space দু'বার আর কাজ করে না বলে মনে হয়, SWT টেম্পলেটগুলি নিয়ে আসে। প্রতিস্থাপন আছে?
নুমেনন

28

আমি জানি আমি একটি মরা পোস্ট লাথি দিচ্ছি, তবে সম্পূর্ণ হওয়ার জন্য এটি ভাগ করতে চেয়েছিলাম:

সিঙ্গেলটন প্রজন্মের টেমপ্লেটের একটি সঠিক সংস্করণ, যা ত্রুটিযুক্ত ডাবল-চেকড লকিং ডিজাইনের (উপরে আলোচিত এবং অন্য কোথায় উল্লিখিত) কাটিয়ে উঠেছে

সিঙ্গলটন ক্রিয়েশন টেম্পলেট: নাম দিনcreatesingleton

static enum Singleton {
    INSTANCE;

    private static final ${enclosing_type} singleton = new ${enclosing_type}();

    public ${enclosing_type} getSingleton() {
        return singleton;
    }
}
${cursor}


উপরোক্ত ব্যবহার করে উত্পন্ন সিঙ্গলেটগুলি অ্যাক্সেস করতে:

একক রেফারেন্স টেম্পলেট: নাম দিন getsingleton:

${type} ${newName} = ${type}.Singleton.INSTANCE.getSingleton();

4
এটি মৃত নয়, এটি সম্প্রদায়ের উইকি, সুতরাং এটিগুলি খুঁজে পাওয়ার সাথে সাথে এটিতে আরও টেমপ্লেট যুক্ত করার অর্থ আসে। এগুলির আর কোনও প্রকৃত সেট আর কোথাও নেই ...
জন

জন, পূর্ববর্তী পোস্ট এবং আমার পোস্টের মধ্যে সময়ের ব্যবধানটি প্রায় 8 মাস ছিল, যা উল্লেখ করতে বাধ্য করেছিল। আপনার মন্তব্যের চেয়ে আমি এর চেয়ে ভাল শব্দটি বলতে পারি না :)
কোয়েস্টজেন

আমি যখন এটি কোনও শ্রেণীর অংশ হিসাবে তৈরি করি (কোনও শ্রেণিতে নেস্টেড এনাম) আমি কি ক্লাসের নামটি ${enclosing_type}- ইচ্ছাকৃত হিসাবে পাই ?
মিঃ_আর_আমস_ডি

1
@ মিঃ_আর_আমস_ডি, আমি মনে করি এটিই মূল বিষয়। আপনি এই টেমপ্লেটটি যে শ্রেণীতে রেখেছেন তার একক উদাহরণ পাবেন। এখন আপনাকে যা করতে হবে তা হ'ল এনকোলেসিং টাইপ কনস্ট্রাক্টর (গুলি) ব্যক্তিগত করা এবং বেশ নিরাপদ সিঙ্গলটন জেনারেটর।
মাইক অ্যাডলার

আপনি যদি এনাম ব্যবহারের ${primary_type_name}উদাহরণটি তৈরি করতে এটি ব্যবহার করতে চান তবে :public enum ${primary_type_name} { INSTANCE; private ${return_type} ${name} = new ${return_type}(); public ${return_type} ${getName}(${}) { return ${name}; } ${cursor} }
রবার্ট স্মিট

28

পুনরাবৃত্তি করতে কোড স্নিপেট যুক্ত করুন Map.entrySet():

টেমপ্লেট:

${:import(java.util.Map.Entry)}
for (Entry<${keyType:argType(map, 0)}, ${valueType:argType(map, 1)}> ${entry} : ${map:var(java.util.Map)}.entrySet())
{
    ${keyType} ${key} = ${entry}.getKey();
    ${valueType} ${value} = ${entry}.getValue();
    ${cursor}
}

উত্পন্ন কোড:

for (Entry<String, String> entry : properties.entrySet())
{
    String key = entry.getKey();
    String value = entry.getValue();
    |
}

স্ক্রিনশট


1
আপনার ছবিটির মতো, এটি আমাকে দেখায় যে আপনি ক্ষেত্রের মধ্যে একটি চলক ব্যবহার করতে পারেন ${}এবং তার পরিবর্তে ${cursor}, ক্ষেত্রগুলির মধ্যে "ট্যাব পুনরাবৃত্তি" সক্ষম করে। ধন্যবাদ।
ওয়েস্টার্নগান

25

এর জন্য log, সদস্যের ভেরিয়েবলটিতে যুক্ত করতে একটি সহায়ক ছোট্ট ডিটিটি।

private static Log log = LogFactory.getLog(${enclosing_type}.class);

একটি লগ ফাইলটিতে ম্যানুয়ালি লেখার জন্য: $ {: আমদানি (java.io.PressWriter, java.io.BufferedWriter, java.io.FileWriter)} চেষ্টা করুন {PrintWriter আউট = নতুন মুদ্রণ লেখক (নতুন বাফারড্রাইটার (নতুন ফাইল রাইটার ({{লগ ফাইর: var (স্ট্রিং)}, সত্য))); out.println ($ {logLine: Var (স্ট্রিং)} $ {কার্সার}); out.close (); } ধরা (আইওএক্সেপশন ই) {/ * টোডো: ব্যতিক্রম হ্যান্ডলিং * / ই.প্রিন্টস্ট্যাকট্রেস (); }
জ্যাক মিলার

24

মকিতো দিয়ে একটি উপহাস তৈরি করুন ("জাভা বিবৃতি" প্রসঙ্গে):

${:importStatic('org.mockito.Mockito.mock')}${Type} ${mockName} = mock(${Type}.class);

এবং "জাভা টাইপ সদস্যদের":

${:import(org.mockito.Mock)}@Mock
${Type} ${mockName};

একটি ব্যতিক্রম ছুঁড়ে ফেলার জন্য একটি শূন্য পদ্ধতি উপহাস করুন:

${:import(org.mockito.invocation.InvocationOnMock,org.mockito.stubbing.Answer)}
doThrow(${RuntimeException}.class).when(${mock:localVar}).${mockedMethod}(${args});

কিছু করার জন্য একটি অকার্যকর পদ্ধতি উপহাস করুন:

${:import(org.mockito.invocation.InvocationOnMock,org.mockito.stubbing.Answer)}doAnswer(new Answer<Object>() {
public Object answer(InvocationOnMock invocation) throws Throwable {
    Object arg1 = invocation.getArguments()[0];
    return null;
}
}).when(${mock:localVar}).${mockedMethod}(${args});

ঠিক একবার বলা হয়েছে উপহাস পদ্ধতিটি যাচাই করুন:

${:importStatic(org.mockito.Mockito.verify,org.mockito.Mockito.times)}
verify(${mock:localVar}, times(1)).${mockMethod}(${args});

উপহাসের পদ্ধতিটি যাচাই করা হয় না:

${:importStatic(org.mockito.Mockito.verify,org.mockito.Mockito.never)}verify(${mock:localVar}, never()).${mockMethod}(${args});

গুগল পেয়ারা (এবং হ্যাশসেট এবং হ্যাশম্যাপের অনুরূপ) ব্যবহার করে নতুন লিঙ্কযুক্ত তালিকা:

${import:import(java.util.List,com.google.common.collect.Lists)}List<${T}> ${newName} = Lists.newLinkedList();

এছাড়াও আমি একটি বিশাল টেম্পলেট ব্যবহার করি যা একটি পরীক্ষার ক্লাস তৈরি করে। এখানে এটির একটি সংক্ষিপ্ত খণ্ড রয়েছে যা আগ্রহী প্রত্যেকেরই পছন্দসই করা উচিত:

package ${enclosing_package};

import org.junit.*;
import static org.junit.Assert.*;
import static org.hamcrest.Matchers.*;
import static org.mockito.Matchers.*;
import static org.mockito.Mockito.*;
import org.mockito.Mockito;
import org.slf4j.Logger;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
import org.junit.runner.RunWith;

// TODO autogenerated test stub
@RunWith(MockitoJUnitRunner.class)
public class ${primary_type_name} {

    @InjectMocks
    protected ${testedType} ${testedInstance};
    ${cursor}

    @Mock
    protected Logger logger;

    @Before
    public void setup() throws Exception {
    }

    @Test
    public void shouldXXX() throws Exception {
        // given

        // when
        // TODO autogenerated method stub

        // then
        fail("Not implemented.");
    }
}
// Here goes mockito+junit cheetsheet

1
আমি কৌতূহলী: আপনার কেন লগারকে উপহাস করার দরকার হবে?
ভ্লাদিমির সিজিকভ

6
কোনও ব্যতিক্রম ধরা পড়লে (ব্যর্থতার দৃশ্যে) যদি উপহাস করা লগারকে ডেকে আনা হয় তবে আপনি যাচাই করতে পারবেন। এটি স্বতঃস্ফূর্তভাবে কার্যকর যদি আপনি এটিকে পুনর্বিবেচনা করতে চান না তবে দৃ silent়তার সাথে এটি অবহেলা করা উচিত নয় দাবি করতে চান।
ম্যান্ট্রিড

23

নাল চেকস!

if( ${word_selection} != null ){
    ${cursor}
}

if( ${word_selection} == null ){
    ${cursor}
}

PreConditions.checkNotNull(...)পেয়ারা পদ্ধতি একটি খুব পাঠযোগ্য বিকল্প (বিশেষ করে স্ট্যাটিক আমদানির সঙ্গে) হয়
Thorbjørn Ravn অ্যান্ডারসনকে

নাল না পরীক্ষা করার আগে প্রথমে নাল (== নাল) যাচাই করা সেরা অনুশীলন।
কৃষাপ্রকাশ

21

আমার এক প্রিয়জন হলেন পূর্বাচ :

for (${iterable_type} ${iterable_element} : ${iterable}) {
    ${cursor}
}

এবং ট্রেসআউট , যেহেতু আমি এটি ট্র্যাকিংয়ের জন্য প্রচুর ব্যবহার করছি:

System.out.println("${enclosing_type}.${enclosing_method}()");

আমি কেবল অন্য একটি সম্পর্কে ভেবেছি এবং কোনও দিন এটি ইন্টারনেটে খুঁজে পেয়েছি, কনস্ট :

private static final ${type} ${name} = new ${type} ${cursor};

11
পূর্বাভাসটি গ্রহপদে স্ট্যান্ডার্ড কোড সহায়তা হিসাবে উপলব্ধ, আমি দেখতে পাচ্ছি না যে আপনার টেম্পলেটটি স্ট্যান্ডার্ড সংস্করণে অতিরিক্ত কিছু করে
রিচ সেলার

4
ডান, এবং sysout খুব উদ্ভাবনী টেম্পলেট। প্রশ্নটি ছিল, দরকারী টেম্পলেটগুলি আমরা ব্যবহার করছি।
আর্টেম বার্জার

4
তোমার traceout ইতিমধ্যে Eclipse এ উপলব্ধ systrace
ডগবনে

7
ভাল লাগল, আমি বিশ্বাস করতে চাই যে এটি এখন এই প্রশ্নের কারণে গ্রহটিতে প্রদর্শিত হবে।
আর্টেম বার্জার

const একটি প্রমিত কোড static_final যেমন সাহায্য হিসাবে (নিশ্চিত না যখন এটি যদিও যোগ করা হয়েছিল) পাওয়া যায়
করুন Armand

20

সিসআউট সম্পর্কে সামান্য টিপ - আমি এটির নাম পরিবর্তন করে "সোপ" রাখতে চাই। জাভা লিবসের আর কিছুই কিছুই "এসওপি" দিয়ে শুরু হয় না তাই আপনি দ্রুত "এসওপ" টাইপ করতে এবং বুম করতে পারেন, এটি সন্নিবেশ করে।


11
ডিফল্টরূপে, কেবল টাইপিং টাইপ syysout হিসাবে একই কাজ করবে।
মাস্টারস্ক্র্যাট

9
তবুও 25% দ্বারা হারাও, যদিও ...;)
স্কট স্টানচিল্ড

2
যেহেতু গ্রহগ্রহ মঙ্গলটি শর্টকাট "সাইসো" + সিটিআরএল + স্পেসে একটি দুর্বল পদক্ষেপ পিছিয়ে রয়েছে : এটি এমন কয়েকটি শ্রেণীর তালিকা তৈরি করবে যার নাম, s, y, s এবং o তাদের নামে রয়েছে (নতুন ক্যামেলকেসের সন্ধানের কারণে)। সুতরাং, এখন আপনাকে তালিকা থেকে অতিরিক্ত সংস্থান নির্বাচন করতে হবে এবং রিটার্ন টিপুন।
বোবল

17

বর্তমান স্কোপ (ইলারগ) এর ভেরিয়েবলের সাথে একটি অবৈধআর্গমেন্ট এক্সেপশন নিক্ষেপ করুন:

throw new IllegalArgumentException(${var});

উত্তম

throw new IllegalArgumentException("Invalid ${var} " + ${var});  

14

কোড উত্পাদনের জন্য অভিনব কিছু নয় - তবে কোড পর্যালোচনার জন্য বেশ কার্যকর

আমি আমার টেমপ্লেট কোডেরিভ কম / মেড / উচ্চ নিম্নে আছে

/**
 * Code Review: Low Importance
 * 
 *
 * TODO: Insert problem with code here 
 *
 */

এবং তারপরে টাস্ক ভিউতে - একটি বৈঠকের সময় আমি যে কোড কোড পর্যালোচনা করতে চাই তার সবগুলি আমাকে প্রদর্শন করবে।


14

আরো কিছু টেমপ্লেট এখানে

সহ:

  • নির্দিষ্ট তারিখ থেকে একটি তারিখ অবজেক্ট তৈরি করুন
  • একটি নতুন জেনেরিক অ্যারেলিস্ট তৈরি করুন
  • লগার সেটআপ
  • নির্দিষ্ট স্তর সহ লগ করুন
  • একটি নতুন জেনেরিক হ্যাশম্যাপ তৈরি করুন
  • একটি মানচিত্রের মাধ্যমে Iterate, কী এবং মান মুদ্রণ করুন
  • সিম্পলডেটফর্ম্যাট ব্যবহার করে একটি সময় পার্স করুন
  • লাইন দ্বারা একটি ফাইল লাইন পড়ুন
  • লগ ইন করুন এবং একটি ধরা পড়া পুনর্বিবেচনা
  • কোডের একটি ব্লকের কার্য সম্পাদনের সময় প্রিন্ট করুন
  • পর্যায়ক্রমিক টাইমার তৈরি করুন
  • একটি ফাইল একটি স্ট্রিং লিখুন

একটি ব্যাকব্যাক মেশিনের লিঙ্ক যুক্ত করেছে
berezovskyi


10

শিম সম্পত্তি

private ${Type} ${property};

public ${Type} get${Property}() {
    return ${property};
}

public void set${Property}(${Type} ${property}) {
    ${propertyChangeSupport}.firePropertyChange("${property}", this.${property},     this.${property} = ${property});
}

PropertyChangeSupport

private PropertyChangeSupport ${propertyChangeSupport} = new PropertyChangeSupport(this);${:import(java.beans.PropertyChangeSupport,java.beans.PropertyChangeListener)}
public void addPropertyChangeListener(PropertyChangeListener listener) {
  ${propertyChangeSupport}.addPropertyChangeListener(listener);
}

public void addPropertyChangeListener(String propertyName, PropertyChangeListener listener) {
  ${propertyChangeSupport}.addPropertyChangeListener(propertyName, listener);
}

public void removePropertyChangeListener(PropertyChangeListener listener) {
  ${propertyChangeSupport}.removePropertyChangeListener(listener);
}

public void removePropertyChangeListener(String propertyName, PropertyChangeListener listener) {
  ${propertyChangeSupport}.removePropertyChangeListener(propertyName, listener);
}

10

জাভা 7 পোস্ট করুন, লোগারগুলি সেট করার একটি দুর্দান্ত উপায় যা ঘেরের ক্লাসে স্থির রেফারেন্সগুলি (বা পছন্দ) পছন্দ করে তা হল স্থিতিক প্রসঙ্গে রানটাইম ক্লাস পাওয়ার জন্য সদ্য চালু হওয়া মেথোহ্যান্ডলস এপিআই ব্যবহার করা।

এসএলএফ 4 জে এর উদাহরণ স্নিপেটটি হ'ল:

private static final Logger logger = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());

যে কোনও আইডিইতে একটি সাধারণ স্নিপেট ছাড়াও, আপনি যদি অন্য কোনও ক্লাসে নির্দিষ্ট কার্যকারিতাটি রিফ্যাক্টর করেন তবে এটি কম ভঙ্গুর কারণ আপনি দুর্ঘটনাক্রমে শ্রেণীর নামটি সাথে রাখবেন না।


9

জিইউআই থ্রেডে কোড চাওয়া

আমি slaterGUI থ্রেডে দ্রুত কোড প্রেরণের জন্য শর্টকাটে নিম্নলিখিত টেম্পলেটটিকে আবদ্ধ করি ।

${:import(javax.swing.SwingUtilities)}
SwingUtilities.invokeLater(new Runnable() {      
      @Override
      public void run() {
        ${cursor}
      }
    });

9

কোড দিয়ে চারপাশে পরীক্ষা করার সময় আমি মাঝে মাঝে কিছু সিএসও মুছে ফেলা হত না । তাই আমি নিজেকে সিআইটি নামে একটি টেম্পলেট তৈরি করেছি ।

System.out.println(${word_selection}${});//${todo}:remove${cursor}

আমি সংকলনের আগে আমি সর্বদা আমার টোডগুলি যাচাই করি এবং কোনও সিস্টেম.আউট আবার মুছতে ভুলব না।


9

strf -> String.format("msg", args) বেশ সহজ তবে টাইপিং কিছুটা সাশ্রয় করে।

String.format("${cursor}",)

6
আমি ব্যবহার করি String.format("${string}",${objects})কারণগ্রহণটি আমাকে আমার স্ট্রিং এবং আমার অবজেক্টের তালিকার মধ্যে ট্যাব করতে দেয়।
ডানকান জোন্স

আমি এই সংস্করণটি ব্যবহার করি: String.format(${word_selection}${},)${cursor}প্রথমে একটি স্ট্রিং নির্বাচন করুন এবং তারপরে এটি 'এসএফ' ব্যবহার করুন। % S এবং আরও কিছু যুক্ত করুন ...
ক্রিস্টোফ রাউসি

8

বর্তমান প্রদর্শন থেকে একটি এসডব্লিউটি রঙ পান:

Display.getCurrent().getSystemColor(SWT.COLOR_${cursor})

সিঙ্কেক্সেক দিয়ে চমকে উঠুন

PlatformUI.getWorkbench().getDisplay().syncExec(new Runnable(){
    public void run(){
        ${line_selection}${cursor}
    }
});

সিঙ্গলটন ডিজাইনের প্যাটার্নটি ব্যবহার করুন:

/**
 * The shared instance.
 */
private static ${enclosing_type} instance = new ${enclosing_type}();

/**
 * Private constructor.
 */
private ${enclosing_type}() {
    super();
}

/**
 * Returns this shared instance.
 *
 * @returns The shared instance
 */
public static ${enclosing_type} getInstance() {
    return instance;
}

3
কেবলমাত্র একটি দ্রষ্টব্য নোট - জাশুতে ব্লুচ নামে পরিচিত ম্যাস্ট্রোর মতে এনাম ব্যবহার করে জাভাতে সিলেটলেট তৈরির জন্য পছন্দনীয় পদ্ধতি হওয়া উচিত।
পাবলোজিম

হাই পাবলোজিম, যেহেতু আমি এই টেমপ্লেটটি পোস্ট করেছি আমি কার্যকর জাভা পড়া শুরু করি এবং আমি আমার সিঙ্গলটনের প্রয়োগগুলি পরিবর্তন করে এনামে পরিণত করি। তবুও আমি টেমপ্লেটটি এনাম তৈরি করতে এবং এইভাবে শ্রেণির ঘোষণাকে সংশোধন করার কোনও উপায় খুঁজে পাইনি। আপনি এই টেমপ্লেট পেয়েছেন? ধন্যবাদ মনু
ম্যানুয়েল সেলভা

এফওয়াইআই: এখানে এনাম সিঙ্গলটন প্যাটার্ন ইলেক্ট্রোটেক.ওয়ার্ডপ্রেস . com/2008/08/06/… । আমি এটির মতো বিশদ বিবরণ করি না তবে তারপরে আমার কাছে অনেকগুলি সিলেটলেট নেই। এটিকে জাভা টেমপ্লেটে রূপান্তর করা সহজ।
pjp

1
এনাম পদ্ধতির জন্য, আমি আশা করি যে আপনার সমস্ত সিলেটলেটগুলি তুলনামূলক, সিরিয়ালাইজযোগ্য অবজেক্ট হিসাবে অর্থবোধ করে, কারণ প্রচুর সিঙ্গেলটন না (এবং তিনি কেন এই "... পদ্ধতির এখনও ব্যাপকভাবে গ্রহণ করা যায়নি" - কারণ তুলনাযোগ্যতা এবং সিরিয়ালাইজেশন ডন কিছু
সিঙ্গলটন

Serializable? হ্যাঁ. আপনার সিঙ্গেলনের রেফারেন্স সহ কোনও অবজেক্টের সিরিয়ালাইজেশন বিবেচনা করুন। যদি এটি সিরিয়ালাইজযোগ্য না হয়, তবে আপনি একটি এনপিইর মুখোমুখি হতে পারেন। যদি এটি হয় (এবং আপনি ডিফল্ট ডি-সিরিয়ালাইজেশন ওভাররাইট করার জন্য পদ্ধতিগুলি যোগ করেন না), তবে আপনি আপনার "সিঙ্গলটন" এর অন্য কোনও উদাহরণ পেতে পারেন।
জোহানেস কুহন

8

এবং একটি সমতুল্য বিল্ডার, হ্যাশকোডবিল্ডার অভিযোজন:

${:import(org.apache.commons.lang.builder.EqualsBuilder,org.apache.commons.lang.builder.HashCodeBuilder)}
@Override
public boolean equals(Object obj) {
    return EqualsBuilder.reflectionEquals(this, obj);
}

@Override
public int hashCode() {
    return HashCodeBuilder.reflectionHashCode(this);
}

প্রতিবিম্ব ছাড়াই সমাধানের জন্য আমার উত্তরটির নীচের লিঙ্কটি দেখুন
gswierczynski

8

লগার ঘোষণার জন্য টেমপ্লেট দুর্দান্ত।

আমি লগফোন, লেডেবগ, ল্যাওয়ার্ন, লারার তৈরি করি যা আমি প্রায়শই ব্যবহার করি।

lerror:

logger.error(${word_selection}${});${cursor}

8

একটি ইভেন্টের জন্য সবকিছু তৈরি করুন

যেহেতু ইভেন্টগুলি জাভাতে তৈরির জন্য বেদনাদায়ক those সমস্ত ইন্টারফেস, পদ্ধতি এবং কেবল 1 ইভেন্টের জন্য লেখার স্টাফ - 1 ইভেন্টের জন্য প্রয়োজনীয় সবকিছু তৈরি করার জন্য আমি একটি সাধারণ টেম্পলেট তৈরি করেছি।

${:import(java.util.List, java.util.LinkedList, java.util.EventListener, java.util.EventObject)}

private final List<${eventname}Listener> ${eventname}Listeners = new LinkedList<${eventname}Listener>();

public final void add${eventname}Listener(${eventname}Listener listener)
{
    synchronized(${eventname}Listeners) {
        ${eventname}Listeners.add(listener);
    }
}

public final void remove${eventname}Listener(${eventname}Listener listener)
{
    synchronized(${eventname}Listeners) {
        ${eventname}Listeners.remove(listener);
    }
}

private void raise${eventname}Event(${eventname}Args args)
{
    synchronized(${eventname}Listeners) {
        for(${eventname}Listener listener : ${eventname}Listeners)
            listener.on${eventname}(args);
    }
}

public interface ${eventname}Listener extends EventListener
{
    public void on${eventname}(${eventname}Args args);
}

public class ${eventname}Args extends EventObject
{
    public ${eventname}Args(Object source${cursor})
    {
        super(source);
    }
}

আপনি ইভেন্টগুলি ভাগ একটি একক থাকে তাহলে EventObject, শুধু কাস্টমাইজড এক ফর্মা দ্বারা সন্নিবেশিত মুছে দিন এবং যথাযথ অংশের পরিবর্তন raise___()এবংon____()

জেনেরিক ইন্টারফেস এবং জেনেরিক ক্লাস ব্যবহার করে আমি একটি সুন্দর, সামান্য, মার্জিত ইভেন্ট মেকানিজম লিখেছিলাম, তবে জাভা জেনেরিকগুলি যেভাবে পরিচালনা করে তার কারণে এটি কাজ করবে না। = (

সম্পাদনা : 1) আমি একটি ইস্যু চলাকালীন থ্রেডগুলিতে শ্রোতাদের যোগ / সরানোর ক্ষেত্রে ইস্যুটি ছড়িয়েছি। Listযখন ব্যবহারে, তাই আমি যোগ পরিবর্তন করা যায় না synchronizedব্লক যেখানে শ্রোতারা তালিকা অ্যাক্সেস করা হচ্ছে বা ব্যবহৃত, তালিকা নিজেই লক।


লক থাকা অবস্থায় ইভেন্টগুলি প্রেরণ (সিঙ্ক্রোনাইজড বা অন্যথায়) ঘটতে যাওয়ার জন্য একটি অচলাবস্থা। এক্ষেত্রে শ্রোতাদের অনুলিপি করা আরও ভাল হবে যখন একটি সিঙ্ক্রোনাইজড ব্লকে থাকাকালীন এবং নতুন তালিকাকে পুনরাবৃত্তি করতে।
সিন্ডেলার

একটি সমকালীন লিঙ্কযুক্ত কিউ ব্যবহার করুন । এটি লকিংয়ের প্রয়োজন হয় না, কারণ এটির সাথে দুর্বলভাবে সামঞ্জস্যপূর্ণ পুনরাবৃত্তি রয়েছে, যা কখনই কোন সমকালীন মড্যালিফিকেশন এক্সেক্সশন নিক্ষেপ করে না।
স্টিফান ডোলাস 14

8

পরীক্ষার পদ্ধতি সন্নিবেশ করানো উচিত যখন-তখন-দেওয়া উচিত

খুব ভাল বিকাশকারী এবং বন্ধুর সাথে প্রোগ্রামিং করার সময় আমি সম্প্রতি এর সাথে একইরকম সংস্করণ দেখেছি এবং আমি মনে করি এটি এই তালিকার একটি দুর্দান্ত সংযোজন হতে পারে।

এই টেমপ্লেটটি, একটি বর্গ একটি নতুন পরীক্ষা পদ্ধতি তৈরি করবে নিম্নলিখিত দেওয়া - যখন - তখন কাছে থেকে আচরণ চালিত উন্নয়ন , মন্তব্য (BDD) দৃষ্টান্ত স্ট্রাকচারিং কোড একটি নির্দেশিকা হিসেবে। এটি "নাম" দিয়ে পদ্ধতির নামটি শুরু করবে এবং পরীক্ষার পদ্ধতির দায়িত্বের সর্বোত্তম বর্ণনার সাথে আপনাকে বাকী ডামি পদ্ধতির নাম "চেকটিসঅ্যান্ড থ্যাট" প্রতিস্থাপন করতে দেবে। নামটি পূরণ করার পরে, ট্যাব আপনাকে সোজা নেবে// Given section , যাতে আপনি আপনার পূর্বশর্তগুলি টাইপ করতে শুরু করতে পারেন।

"টেস্টের পদ্ধতিগুলি কখন দেওয়া উচিত" - এর সাথে বর্ণিত বিবরণ সহ আমি এটি "টিএসটি" তিনটি অক্ষরে ম্যাপ করেছি)

আমি আশা করি আপনি এটির মতো কার্যকর হিসাবে দেখবেন যখন আমি এটি দেখেছি:

@Test
public void should${CheckThisAndThat}() {
    Assert.fail("Not yet implemented");
    // Given
    ${cursor}

    // When


    // Then

}${:import(org.junit.Test, org.junit.Assert)}

আমি সেই টেম্পলেটটি পছন্দ করি। আমি আরও কিছু টেস্টিংয়ের স্বাচ্ছন্দ্যের জন্য একটি "থ্রো এক্সেপশন" যুক্ত করেছি।
টর্স্টেন

আমি বিডিডি দৃষ্টান্ত পছন্দ করি। তার জন্য খুব সুন্দর টেম্পলেট। এবং কেবল একটি নোট: আপনার খুব ভাল-বিকাশকারী এবং বন্ধু চলে গেছে!
বুবল

7

স্প্রিং ইনজেকশন

আমি জানি এই গেমটি ধীরে ধীরে দেরীতে এসেছে তবে আমি এখানে ক্লাসে স্প্রিং ইনজেকশনের জন্য ব্যবহার করছি:

${:import(org.springframework.beans.factory.annotation.Autowired)}
private ${class_to_inject} ${var_name};

@Autowired
public void set${class_to_inject}(${class_to_inject} ${var_name}) {
  this.${var_name} = ${var_name};
}

public ${class_to_inject} get${class_to_inject}() {
  return this.${var_name};
}

7

অ-ইনস্ট্যান্টেবল ক্লাসগুলির জন্য এখানে একটি নির্মাতা রয়েছে:

// Suppress default constructor for noninstantiability
@SuppressWarnings("unused")
private ${enclosing_type}() {
    throw new AssertionError();
}

এটি কাস্টম ব্যতিক্রমগুলির জন্য:

/**
 * ${cursor}TODO Auto-generated Exception
 */
public class ${Name}Exception extends Exception {
    /**
     * TODO Auto-generated Default Serial Version UID
     */
    private static final long serialVersionUID = 1L;    

    /**
     * @see Exception#Exception()
     */
    public ${Name}Exception() {
        super();
    }

    /**
     * @see Exception#Exception(String) 
     */
    public ${Name}Exception(String message) {
        super(message);         
    }

    /**
     * @see Exception#Exception(Throwable)
     */
    public ${Name}Exception(Throwable cause) {
        super(cause);           
    }

    /**
     * @see Exception#Exception(String, Throwable)
     */
    public ${Name}Exception(String message, Throwable cause) {
        super(message, cause);
    }
}

5

আমি এটির মতো উত্পন্ন শ্রেণীবদ্ধ মন্তব্যটি পছন্দ করি:

/**
 * I... 
 * 
 * $Id$
 */

"আমি ..." তাত্ক্ষণিক বিকাশকারীকে ক্লাস কী করে তা বর্ণনা করতে উত্সাহিত করে। আমি অননুমোদিত ক্লাসগুলির সমস্যা উন্নত বলে মনে করি।

এবং অবশ্যই $ আইডি একটি দরকারী সিভিএস কীওয়ার্ড।


5

nullমান এবং খালি স্ট্রিংগুলি সন্ধান করে আমি এই স্নিপেটগুলির প্রচুর ব্যবহার করেছি ।

আমি প্রাপ্ত আর্গুমেন্টগুলি পরীক্ষা করার জন্য আমার পদ্ধতিগুলির প্রথম কোড হিসাবে "যুক্তি পরীক্ষা" -তন্ত্রগুলি ব্যবহার করি।

testNullArgument

if (${varName} == null) {
    throw new NullPointerException(
        "Illegal argument. The argument cannot be null: ${varName}");
}

আপনার কোম্পানির বা প্রকল্পের মান অনুসারে আপনি ব্যতিক্রম বার্তাটি পরিবর্তন করতে চাইতে পারেন। তবে, আমি এমন কিছু বার্তা দেওয়ার প্রস্তাব দিচ্ছি যাতে আপত্তিকর যুক্তির নাম অন্তর্ভুক্ত থাকে। অন্যথায় আপনার পদ্ধতির কলকারীকে কী ভুল হয়েছে তা বোঝার জন্য কোডটি সন্ধান করতে হবে। (একটিNullPointerException কোনও বার্তা ছাড়াই একটি মোটামুটি অযৌক্তিক বার্তা "নাল" দিয়ে একটি ব্যতিক্রম উত্পন্ন করে))

testNullOrEmptyStringArgument

if (${varName} == null) {
    throw new NullPointerException(
        "Illegal argument. The argument cannot be null: ${varName}");
}
${varName} = ${varName}.trim();
if (${varName}.isEmpty()) {
    throw new IllegalArgumentException(
        "Illegal argument. The argument cannot be an empty string: ${varName}");
}

আপনি উপর থেকে নাল চেকিং টেম্পলেটটি পুনরায় ব্যবহার করতে পারেন এবং খালি স্ট্রিংয়ের জন্য যাচাই করতে এই স্নিপেটটি প্রয়োগ করতে পারেন। তারপরে আপনি উপরের কোডটি তৈরি করতে এই দুটি টেম্পলেট ব্যবহার করবেন।

উপরের টেম্পলেটটিতে অবশ্য সমস্যা রয়েছে যে যুক্তিটি চূড়ান্ত হলে আপনাকে উত্পাদিত কোডটি কিছু সংশোধন করতে হবে ( ${varName} = ${varName}.trim() ব্যর্থ হবে)।

যদি আপনি প্রচুর চূড়ান্ত যুক্তি ব্যবহার করেন এবং খালি স্ট্রিংগুলি পরীক্ষা করতে চান তবে আপনার কোডের অংশ হিসাবে এগুলি ছাঁটাই করতে না চান, আপনি পরিবর্তে এটি দিয়ে যেতে পারেন:

if (${varName} == null) {
    throw new NullPointerException(
        "Illegal argument. The argument cannot be null: ${varName}");
}
if (${varName}.trim().isEmpty()) {
    throw new IllegalArgumentException(
        "Illegal argument. The argument cannot be an empty string: ${varName}");
}

testNullFieldState

আমি ভেরিয়েবলগুলি পরীক্ষা করার জন্য কিছু স্নিপেটও তৈরি করেছি যা আর্গুমেন্ট হিসাবে প্রেরণ করা হয় না (বড় পার্থক্যটি ব্যতিক্রমের ধরণ, এখন IllegalStateExceptionপরিবর্তে হ'ল )।

if (${varName} == null) {
    throw new IllegalStateException(
        "Illegal state. The variable or class field cannot be null: ${varName}");
}

testNullOrEmptyStringFieldState

if (${varName} == null) {
    throw new IllegalStateException(
        "Illegal state. The variable or class field cannot be null: ${varName}");
}
${varName} = ${varName}.trim();
if (${varName}.isEmpty()) {
    throw new IllegalStateException(
        "Illegal state. The variable or class field " +
            "cannot be an empty string: ${varName}");
}

testArgument

এটি একটি ভেরিয়েবল পরীক্ষা করার জন্য একটি সাধারণ টেম্পলেট। সত্যিই এটির প্রশংসা করতে শিখতে আমার কয়েক বছর সময় লেগেছে, এখন আমি এটি প্রচুর ব্যবহার করছি (উপরের টেম্পলেটগুলির সাথে মিলিয়ে!)

if (!(${varName} ${testExpression})) {
    throw new IllegalArgumentException(
        "Illegal argument. The argument ${varName} (" + ${varName} + ") " +
        "did not pass the test: ${varName} ${testExpression}");
}

আপনি একটি পরিবর্তনশীল নাম বা একটি শর্ত প্রবেশ করেন যা একটি মান দেয়, তারপরে অপারেন্ড ("==", "<", ">" ইত্যাদি) এবং অন্য মান বা ভেরিয়েবল এবং যদি পরীক্ষায় ব্যর্থ হয় তবে ফলাফল কোডটি একটি অবৈধআর্গুমেন্টেক্সটেক্সান ফেলবে।

"" ()) এ মুড়ে পুরো অভিব্যক্তিটি দিয়ে ক্লজটি সামান্য জটিল হওয়ার কারণটি ব্যতিক্রম বার্তায় পরীক্ষার শর্তটিকে পুনরায় ব্যবহার করা সম্ভব করে তোলা।

সম্ভবত এটি কোনও সহকর্মীকে বিভ্রান্ত করবে, তবে কেবলমাত্র যদি তাদের কোডটি দেখতে হয় তবে আপনি যদি এই ধরণের ব্যতিক্রম ছুঁড়ে মারেন তবে তাদের তাদের নাও থাকতে পারে ...

অ্যারে সহ এখানে একটি উদাহরণ:

public void copy(String[] from, String[] to) {
    if (!(from.length == to.length)) {
        throw new IllegalArgumentException(
                "Illegal argument. The argument from.length (" +
                            from.length + ") " +
                "did not pass the test: from.length == to.length");
    }
}

আপনি টেমপ্লেটটি কল করে "from.leth" [TAB] "== to.length" টাইপ করে এই ফলাফলটি পান।

ফলাফলটি "অ্যারেআইন্ডেক্সআউটঅফফাউন্ডস এক্সেকশন" বা অনুরূপের চেয়ে মজাদার এবং প্রকৃতপক্ষে আপনার ব্যবহারকারীদের সমস্যাটি বের করার সুযোগ দিতে পারে।

উপভোগ করুন!


4

আমি এটি বার্তা ফর্ম্যাট (জাভা 1.4 ব্যবহার করে) জন্য ব্যবহার করি। এইভাবে আমি নিশ্চিত যে আন্তর্জাতিকীকরণ করার সময় আমার কাছে এমন কোন যুক্তি নেই যা উত্তোলন করা শক্ত

i18n

String msg = "${message}";
Object[] params = {${params}};
MessageFormat.format(msg, params);

লগিংয়ের জন্য:

লগ

if(logger.isDebugEnabled()){
  String msg = "${message}"; //NLS-1
  Object[] params = {${params}};
  logger.debug(MessageFormat.format(msg, params));
}

4

আমার প্রিয় কয়েকটি হ'ল ...

1: জাভাডোক, একটি স্প্রিং অবজেক্ট ইনজেকশন পদ্ধতি হিসাবে পদ্ধতিটি সম্পর্কে ডক সন্নিবেশ করতে।

 Method to set the <code>I${enclosing_type}</code> implementation that this class will use.
* 
* @param ${enclosing_method_arguments}<code>I${enclosing_type}</code> instance 

2: একটি ফাইলআউটপুট স্ট্রিম তৈরি করতে এবং কোনও ফাইলটিতে বাফার সামগ্রীটি লিখতে উইন্ডোটি ডিবাগ করুন। আপনি যখন কোনও পূর্বের রান (বিয়ন্ডম্পম্পার ব্যবহার করে) এর সাথে বাফার তুলনা করতে চান বা আপনি যদি বাফারের সামগ্রীগুলি দেখতে না পারেন (পরিদর্শনের মাধ্যমে) কারণ এটি খুব বড় ...

java.io.FileOutputStream fos = new java.io.FileOutputStream( new java.io.File("c:\\x.x"));
fos.write(buffer.toString().getBytes());
fos.flush();
fos.close();
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.